Nic*_*ick 7 c arrays pointers dereference
指针对我来说是一件新事物,我很难理解它,但我不会放弃并希望能够学习它.
scanf ("%d", *p)和之间会有什么区别scanf ("%d", p)?
在示例中,我看到如果我想在变量中输入一些值,我应该使用scanf ("%d", p).这对我来说没有意义.不应该scanf ("%d", *p)吗?
我将其解释为:"在指针指向的位置放置一些整数值",例如它指向变量x然后它应该是x = 10,但事实并非如此.然后如何使用scanf()和指针在数组中设置值?
我在哪里以及出错了什么?我正在尝试使用C语言学习这个,因为它是我应该在我的班级中使用的语言.
例如:
#include <stdio.h>
int main () {
float x[10], *p;
int i;
p = &x[0];
for (i = 0; i < 10; i++) {
scanf("%d", p + i);
}
for (i = 0; i < 10; i++) {
printf("%d", *(p + i));
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
为什么只p + i在第一个for () {}和*(p + i)第二个循环中?我也会把它放在*(p + i)第一个for () {}.*(p + i)对我来说就是:"对第(p + i)个元素是什么,并使它等于某个值".
Rya*_*ing 18
*p是指去的地方p点
&p手段采取的地址p,或"获得一个指向"p
int i;
scanf("%d", &i); // gives scanf a pointer to i
int i;
int *p = &i;
scanf("%d", p); // a more contrived way to say the same thing
Run Code Online (Sandbox Code Playgroud)
强制性的视觉解释是Pointer Fun with Binky.
您可以从右到左阅读类型:
int *p>> phas type int *"=> p是指向int
int *p=>" *phas type int" 的指针=> *p是int指向的p
Kei*_*son 12
一个是对的,另一个是错的.(或两者都可能是错的,取决于是什么p.)
如果你打电话
scanf("%d", SOMETHING);
Run Code Online (Sandbox Code Playgroud)
然后SOMETHING 必须是一个指针int.
如果你有一个int对象,使用一元&来获取它的地址(即指向对象的指针):
int n;
scanf("%d", &n);
Run Code Online (Sandbox Code Playgroud)
如果p碰巧是一个int*,那么你可以使用它的值:
int *p;
scanf("%d", p);
Run Code Online (Sandbox Code Playgroud)
但是这里我没有赋值p,所以这个编译但是有未定义的行为.还行吧:
int n;
int *p = &n;
scanf("%d", p);
Run Code Online (Sandbox Code Playgroud)
至于使用*p,只有当p指针指向一个指针时才有效int:
int n;
int *p0 = &n;
int **p = &p0;
scanf("%d", *p);
Run Code Online (Sandbox Code Playgroud)
但这样做很少有意义.绝大多数时候,这个论点只是一些int对象的地址,就像&n.
如果n是一个int,那么只是传递n给scanf没有意义.你只是路过的电流值的n.关键是你要允许scanf存储一个新值n,并且要做到这一点,scanf需要的是地址n.