C语言指针数组问题
我又又又来问问题啦?是一个指针数组的问题具体代码如下:
int main(void){
int a[] = {0, 1, 2, 9};
int b[] = {3, 4, 5};
int c[] = {6, 7, 8};
int * parr[] = {a, b, c};
printf("%p\n", *parr);
printf("%p\n", *(parr+1));
return 0;
}
问题是:
1.parr是一个指针数组,parr的类型是int *, 之前看视频说,指针变量前的类型决定了指针走一步走多远,我的电脑是64位的,应该走8字节,但是现在却只走了6字节
2.parr指向b数组,parr ==*(parr+1),这样的话,parr+1应该是走16个字节,8字节这个也不对,整的我现在有点迷糊
所以想请教一下大家,麻烦大家给我解答一下,谢谢啦!
去看看它们的区别
printf("%p\n", &a);
printf("%p\n", &b);
printf("\n");
printf("%p\n", *parr);
printf("%p\n", *(parr+1));
printf("\n");
printf("%p\n", parr);
printf("%p\n", parr+1); 在老哥的提点下确实发现了一些错误
首先先说错误:
1.指针的步长是针对指针而言,应该看的是parr和(parr+1),且地址之间的输出为16进制,经过验证,确实是8字节(电脑为64位)
2.parr = *(parr+1)没有问题,(parr+1)被解引用之后,得到的是数组b的地址,而数组a,b,c是由操作系统自行分配在栈区,分配的地址可能并不相邻
3.如果想要以指针的形式取出b数组中第二个元素,可以表示为 *(*(parr+1)+1)
m=*(parr+1)表示b的地址,这里+1看的是指针数组的类型,是int*类型,所以走了8字节
*(m+1)表示b中元素,这里的+1是在b数组中,指针的类型是int类型,所以走了4字节,找到的是6
两个都+1,但是走的字节数不同
页:
[1]