我有以下代码:
#include<stdio.h>
int main()
{
int(* a)[10]; //declare a as pointer to array 10 of int
int b[10]; // taken a array of 10 int
b[2]=32;
a=&b;
printf("b is on %p\n",&b);
printf("a is on %p\n",a);
printf("magic is %d\n",a[2]); // why this is not showing 32
return 0;
}输出:
b is on 0xbfa966d4
a is on 0xbfa966d4
magic is -1079417052这里我把a作为指向数组b的int的数组10的指针,那么现在为什么不能在a[2]上获得32的值?
a[2]被计算为*(a+2),所以现在有数组b的地址,所以*(b+2)和*(a+2)是相似的,为什么这里我没有得到32的值呢?
编辑:我通过使用
(*a)[2]但我不明白它是怎么运作的..。看看什么时候
a[2]是*(a+2),a+2是加2 * sizeof(int[10])字节。
这样(*a)[2]怎么扩展?
发布于 2012-02-16 09:37:25
由于a已经是一个指针,您必须取消引用它,以便引用它所指向的数组:
(*a)[2]发布于 2012-02-16 09:49:49
#include<stdio.h>
int main()
{
int(* a)[10]; //declare a as pointer to array 10 of int
int b[10]; // taken a arry of 10 int
b[2]=32;
a=&b;
printf("b is on %p\n",&b);
printf("a is on %p\n",a);
printf("magic is %p\n",a + 2); // Changed to show pointer arithmetic
return 0;
}这将打印以下内容:
b is on 0xbfe67114
a is on 0xbfe67114
magic is 0xbfe67164你知道是怎么回事吗?magic - a等于80,也就是4* 10 * 2。这是因为a是一个指向10个整数数组的指针,所以sizeof(*a) == 10 * sizeof(int)而不是sizeof(a) == sizeof(int),这就是你所期望的。下次要注意指针算法中的类型!
发布于 2015-01-13 07:25:32
我无法在这里添加评论,因为它需要50声誉。因此,我的问题,对张贴的问题。很抱歉,如果我将问题张贴在回答框中,违反了一些规则。这个问题表明,我们在执行指针算法时应该小心。但是,如果仅仅通过使用整数的指针就可以完成同样的事情,那么使用数组的指针有什么好处呢?
https://stackoverflow.com/questions/9308695
复制相似问题