使用指针到达数组成员

时间:2014-07-01 07:31:01

标签: c arrays pointers

我尝试使用指针到达数组成员。 Array的第一个成员地址是23fe20; 当我写' 1'该程序必须显示23fe24(因为23fe20 + 4 * 1 = 23fe24),但不是这样工作。程序输出为:23fe30 .. 我可以使用*(指针+ i)来接触阵列成员,但我想要与地址联系。我怎样才能做到这一点?对不起我的英文,非常感谢:'(

int main(int argc, char *argv[]) {
int array[5]={46,85,111,1976,2};
int *pointer,indices;
pointer=array;
int i=0;

printf("Array members : ");
for(i=0;i<=4;i++){
    printf("%d ",array[i]);
}
printf("\n\n Array's First member' : %x\n\n",&*pointer);

printf("Which array member do you want to reach? ");
scanf("%d",&indices);


printf("\n Your member adress : %x",pointer+sizeof(int)*indices);

return 0; }

2 个答案:

答案 0 :(得分:2)

您使用sizeof(int)计算的地址已由编译器为您完成。因此,您的计算使其指向其他地方(因为相同的计算已完成两次)。您只需向指针添加一个整数类型即可访问元素。

所以:

printf("\n Your member adress : %p",(void*) (pointer+indices));

您还应该在打印地址的其他地方使用%p

答案 1 :(得分:2)

您看到的行为的原因是,在C中,指针具有类型,并且定义了添加以添加许多成员,而不是 bytes

实际上,语法array[i]*(array+i)相同。

因此,您必须删除乘法sizeof(int),或者,如果您真的想要探索地址上的算术,请pointer char *相反,因为一个字符是一个字节。

示例:

char *cp;
int *ip;
ip = array;
cp = (char *) ip;
printf("%p\n%p\n", ip + 1, cp + 1);
假设array位于地址23fe20:

,将打印

23fe24
23fe21

(假设sizeof(int) == 4