【发布时间】:2013-06-18 02:27:05
【问题描述】:
我正在尝试访问 2D 字符数组。我有一个指向正确地址的指针,但不知何故,引用不起作用。
char ary[5][8];
char temp[8];
int i;
char **a_ptr = &ary;
for(i=0; i<5; i++){
sprintf(temp, "0x10%d" , i);
strcpy(ary[i] , temp);
printf("~~~%s@0x%x == 0x%x" , ary[i] , &ary[i] , (a_ptr + i));
}
for(i=0; i<5; i++){//This wont work.
printf("~~~%s@0x%x" , *(a_ptr + i) , (a_ptr + i));
}
下面是这个函数在解除指针中断之前的输出。
输出格式:值@地址
0x100@0x5fbff408 == 0x5fbff408
0x101@0x5fbff410 == 0x5fbff410
0x102@0x5fbff418 == 0x5fbff418
0x103@0x5fbff420 == 0x5fbff420
0x104@0x5fbff428 == 0x5fbff428
正如我们在上面的输出中看到的那样,数组值被正确填充并且 a_ptr 指向正确的地址 (&ary[i] == (a_ptr + i))。
但是当指针是尊重时,它会在那里中断。即使使用 [] 运算符也是如此。
*(a_ptr + i); //Breaks
a_ptr[i]; //Breaks as well
但是,(a_ptr + i) 指向正确的地址。
谢谢,
【问题讨论】:
标签: c pointers multidimensional-array