我目前正在看关于C语言指针的课程,我有一个关于多重间接寻址的问题。我明白什么是多重间接寻址,这没关系,但我运行了一段代码,我试图以一种稍微不同的方式做同样的事情,但它不起作用,我想知道为什么?
我的问题是关于第32行上的指针转换,当我像这样转换它时,为什么这不起作用:printf(";gp指向的值是:%s\n";,(char*)gp)
代码如下:
#包括<;标准h>;
int数据[3];
字符*字[3];
int main(int argc,字符**argv)
{
void*gp;
字符*单词=“rijec”;;
printf(“s\n”字);
对于(int i=0;i<;3;i++)
{
数据[i]=i;
}
字[0]=“零”;;
字[1]=“一”;;
字[2]=“两个”;;
gp=数据;
printf(“\n数组数据的地址是:%p\n”,gp);
对于(int i=0;i<;3;i++)
{
printf(gp指向的值是%d\n,*(int*)gp);
gp=(int*)gp+1;
}
gp=单词;
printf(“字符串-单词数组的地址为:%p\n”,gp);
对于(int i=0;i<;3;i++)
{
printf(gp指向的值是:%s\n,*(char**)gp);
gp=(字符**)gp+1;
}
返回0;
}
第32行gp包含存储数组字的地址(因为数组字在赋值过程中衰减为指针)。数组words由3个指针组成。当您将其转换为char*时,您告诉编译器将此数组视为其每个元素都是char而不是指针。您需要取消对指针的引用以获取实际字符串