C语言:求最全最好的文章——如何理解int *p,int(*)p,int**p这些东西

里面肯定有某种“逻辑”可以很好地记住这些带*定义的用法的
比如int*p应该理解为int(*p)还是(int*)p呢?

int *p和int(*)p是一个意思,表示p是一个整型的指针变量。int **p表示p是一个整型指针变量的指针,即一个二级指针。举例说明:
int a=10;
int *p=&a;
那么*p=10;(注意:这里的*和int *p中的*不是一个意思,&是取地址,*就是取某块地址中所放的内容)
int a[3]={1,2,3};
int *p=a;//p指向的就是数组a的首地址,也就是数组名
那么*p=1;*(p+1)=2;*(p+2)=3;
继续讲解二级指针,举一个二维数组的例子就很明白。
int a[2][3]={1,2,3,4,5,6};
int **p=a;//p指向的是二维数组a的首地址,也就是数组名
这里的p是二级指针,*p是一级指针。相当于p指明数组的第几行,*p指明数组的第几列。
那么*p=a[0];*(p+1)=a[1];
**p=a[0][0]=1;追问

你说的这些我懂,但我有点像是死记那种,比如int*p=a的意思是指针p指向a。我现在想知道的是
int*p应该理解为int(*p)还是(int*)p呢?

追答

可以把int *当作一个整体作为一个特殊类型,这个类型就是一个指针类型。但是要记得(int *) p这个写法是错误的,虽然可以这么理解,但是编译是通不过的。int(*p)这个写法是对的。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-08-23
int*p应该理解为(int*)p,我自己这么觉得的,因为你不能直接对int*p赋数值,例如int*p=5,这样的话,p是个野指针,没有意义。但是你可以对int*p附地址,例如int a=5;int*p=a;这样赋值就是正确的啊。int*是一个int型的指针变量。
第2个回答  2013-08-23
基本C语言书对这部门都有讲的,如果要书的话《C和指针》看看。
第3个回答  2013-08-23
相似回答