黑马程序员技术交流社区
标题:
C指针问题
[打印本页]
作者:
2的狠正经
时间:
2014-4-25 18:22
标题:
C指针问题
int *p[5]
int (*p)[5]
他们各表示的是什么
作者:
魅影穿眸
时间:
2014-4-25 18:38
int (*p)[M]定义的数组指针,表示定义一个指针变量,此指针变量是指向一个含有M个元素的一维数组:举例:
int a[]={1,2,3,4,5},(*p)[5];p=a;那么指针p就指向数组a的首地址,*(p+i)表示数组a中的值。
nt *p[M]表示声明指针数组p,其指向含有M个指针元素的首地址。举例:
int a[3][2]={1,2,3,4,5,6},*p[4];
p[0]=a[0],p[1]=a[1],p[2]=a[2]
注意int *p[M] 中的M一定要和a[n][k]中的行数和列数即n和k没有任何关系!!!
作者:
gmadong@163.com
时间:
2014-4-25 19:39
int (*p)[5] 就是指向一个int的数组的头指针的指针
用法:
int main(int argc, const char * argv[])
{
*(&p)=1;
*(&p+1)=2;
*(&p+2)=3; *(&p+3)=4;
*(&p+4)=5;
printf("%d\n",*(&p));
printf("%d\n",*(&p+1));
printf("%d\n",*(&p+2));
printf("%d\n",*(&p+3));
printf("%d\n",*(&p+4));
}
而 int* p[5]这个就不多说了就是一个装int类型的指针的数组
作者:
251638256
时间:
2014-4-25 20:02
int *p[5]
int (*p)[5]
这个问题是我在群里问的吧 写了一些实验数据 也算明白了些 我来说下是怎么回事吧
由于[]符号优先级比*运算符优先级高 所以第一个定义是5个元素的数组是int指针类型,也就是指针数组,其中欧5个元素
第二个由于加了括号改变了优先级 所以第二个是一个Int指针指向了5个数组元素的指针
第二个定义在Codeblocks上实验没有什么作用,因为虽然声明了是指向有5个元素的指针 .但是实际上可以指向任意相同类型的数组.与普通指针不同的是 其偏移量并不是数据类型的字节数 ,而是数据类型的字节数*数组元素数量
int (*p)[3];
printf("%d\n", sizeof(p[0])); //sizeof(int) * 3 等于 12
printf("%d\n", sizeof((*p)[0])); //sizeof(int) 等于 4
可以看出 这个数据本身是12个字节
而它指向的数据是一个Int元素 是4个字节
区别就这 , 有什么实际用处我也不知
作者:
gaoxinglei123
时间:
2014-4-25 20:16
第一个是一个数组有5个元素,每个元素都是一个整型的指针变量。第二个叫数组指针。是一个指针指向有五个元素的数组
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2