1) 如何使用指针数组访问数组元素?
通过指向数组的指针,我们可以像这样(* a)[0]进行访问 ,(∗ a)[22] ,…..像这样
对吗?
但是如何使用指针数组?
2) 检查这三个代码,其中之一使用数组,其中一个使用指针数组,第三个使用双指针,但是都给出相同的输出。为什么??
#include <stdio.h>
int ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}
#include <stdio.h>
int *ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}
#include <stdio.h>
int **ptr[12];
int main(void) {
if(*(ptr+5)==*(ptr+3)){
printf("Equal");
}
else{
printf("Not Equal");
}
return 0;
}
答案 0 :(得分:1)
在*(ptr+5)
中:
ptr
是数组的名称。sizeof
或一元&
的操作数,也不是用于初始化数组的字符串文字时,它将转换为指向第一个数组的指针元件。因此ptr
指向数组的元素0。ptr+5
加5,得到一个指向数组元素5的指针。*
取消引用指针,从而产生数组元素5的内容。由于数组是在任何函数外部定义的,因此它将初始化为零。因此元素5为零,因此*(ptr+5)
为零。同样,*(ptr+3)
为零,因此比较它们表明它们相等。
使用int ptr[12];
,int *ptr[12];
和int **ptr[12];
的示例仅更改数组中元素的类型。在每种情况下,*(ptr+5)
和*(ptr+3)
引用数组的元素5和3。在每种情况下,元素的值均为零(指针类型为空指针)。
如果要查看数组不同元素之间的差异,请为数组元素分配不同的值。
答案 1 :(得分:1)
在读取数组时,只需不断增加指针即可。分析 下面的代码:
#include <stdio.h>
int main(void) {
int *ptr[3];
int a[] = { 0,1,2};
int b[] = { 3,4,5 };
int c[] = { 6,7,8 };
ptr[0] = a;
ptr[1] = b;
ptr[2] = c;
for (int i = 0;i < 3;i++)
printf("%d %d %d\n",*ptr[0]++,*ptr[1]++,*ptr[2]++);
return 0;
}