区别很大。第一个int *p = a;这是把a给一个指针,一般a是指针或数组,否则可能会造成很大错误。int *p = &a;这是把a的地址给p,一般a可以是一个整型变量。
int a[ ]={0,1,2,3,4,5,6,7,8,9}:意思是a数组为包含{0,1,2,3,4,5,6,7,8,9}的整数数组,int a[ ]={0,1,2,3,4,5,6,7,8,9},*p=a:p是等效于a的整数指针,你应该这样读int *p =a;(*号跟着变量走)定义了一个指针等于a数组首地址。
pp是双重指针的意思,意思就是指向指针的指针。该段程序所表达的意思如下:1、定义一个整数形式的a。2、定义一个P指针指向a(把a的地址&a赋值给P)。3、然后再定义一个双重指针PP,指向P这个指针。在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)...
p的类型是int**,&a[0]的类型是int(*)[3]; 而不是int**;所以p=&a[0];自然就是不合法的了 p=a[1]; //正确,a[1]的值是&a[1][0],类型是int* ,*p的类型是int* , ok p=&(*p); // 正确,*p的类型是int* ,&(*p)的类型是int** ,ok p=&(a[1]); //错误,&(a[...
int a,b,c;ptr=max;scanf("%d,%d",&a,&b);c=(*ptr)(a,b);printf("a=%d,b=%d,max=%d",a,b,c);} ptr是指向函数的指针变量,所以可把函数max()赋给ptr作为ptr的值,即把max()的入口地址赋给ptr,以后就可以用ptr来调用该函数,实际上ptr和max都指向同一个入口地址,不同就是ptr...
A 由于指针p指向变量a,即p==&a,所以*p==a,所以&*p==&a,而p==&a,所以&*p==p
你要知道定义时候的'*'和赋值时候的'*'是不同的。在定义中int *p=&a[0];其中的*表示p是一个指针,p的内容为&a[0];在*p=&a[0]赋值语句时,*表示对p的解除引用,*p所指目标的内容为&a[0];
比如,定义int a[3][3], *p; p = a;这样就是说p指向了二维数组的首地址。而二维数组时连续的存储空间,因此,p[0] == a[0][0] ,p[1] == a[0][1] ,p[2] == a[0][3] ,p[3] == a[1][0] ,p[4] == a[1][1] ,p[5] == a[1][2] ,p[6] == a[2]...
这是你的跑图 正确的用法 我知道你的问题了,你写的没错。 你定义的时候,同时定义了数组和地址变量并且赋值,你用的是逗号隔开的,不是分号,你所谓的*p=a 其实是 int *p=a, 也就是 int *p ; p=a;一句话,你写的并没有错。只是容易误解。欢迎大家给我点赞,这么多回答的,就我...
数组名实际上是一个指向数组第一个元素地址的指针,即a指向a[0],所以p=a,表示p=&a[0],即表示指针p指向a[0]