关于数组指针的问题
我对数组指针的理解为,数组指针是一种改变了某倍数步长的指针。所以若指针为 int (*p),那p的步长为20,若指针为 int *p,则p的步长为4,虽然他们步长不同,但是他们的地址是相同的,不知道我的理解是否正确。
我用我的理解修改了一下课后题,发现一个地方有点奇怪。
http://chuantu.xyz/t6/741/1602067550x989499252.pnghttp://chuantu.xyz/t6/741/1602067594x989559068.png
不知道为什么使用数组指针的程序在输出时要多加个*才能输出和使用指针的程序相同的内容,所以我觉得我的理解可能出了问题,求大佬解答,谢谢 pA是指针数组,p是指针数组指针 召唤风云 发表于 2020-10-7 23:44
pA是指针数组,p是指针数组指针
我知道呀,我疑惑的是用指向指针的指针和指针数组指针指向pA之后,为什么取出值的时候用的*的数量不同 我不知道 本帖最后由 大裤衩子 于 2020-10-8 16:22 编辑
我的理解,注释中已经说明了但是不一定对,欢迎大家指正。
#include <stdio.h>
int main(void)
{
char *pa={"aaaaa","bbbbb","ccccc","ddddd"}; // char* (*)
char** p=pa; // 指针p指向一个一级指针,即数组pa的第0个元素的地址: char** p=&pa;
char* (*q)=&pa; /*q是指向指针数组的指针:这种用法实际上多用于二维数组中,这里q直接指向了数组pa整行
如果q+1的话直接跳过整个pa数组了,想要取得第一值,必须先加上*号,降级为列指针后在列上移动。*/
printf("%p\n", p);
printf("%d,%s\n", **(p), *p);
printf("%d,%s\n", **(p+1), *(p+1));
printf("%d,%s\n", **(p+2), *(p+2));
printf("\n\n");
printf("%p\n", q);
printf("%d,%s\n", **(*q), *(*q));// 行指针加*降级,变列指针(虚构)
printf("%d,%s\n", **(*q+1), *(*q+1));
printf("%d,%s\n", *(*(*q+2)), *(*q+2));
printf("%d,%s\n", ***(q+1), **(q+1)); //所以这么写就是错的
return 0;
}
p是数组指针,不是指针数组 大裤衩子 发表于 2020-10-8 16:20
我的理解,注释中已经说明了但是不一定对,欢迎大家指正。
谢谢你,大概懂了 萌出血 发表于 2020-10-8 18:07
p是数组指针,不是指针数组
感谢指正,笔误了 被绕迷了
页:
[1]