我目前正在觀看有關 C 中指標的課程,我有一個關于多重間接的問題。我明白多重間接是什么,那沒問題,但是我運行了一段代碼,我試圖以稍微不同的方式做同樣的事情,但它不起作用,我為什么會受傷?我的問題是關于第 32 行的指標轉換,為什么當我像這樣轉換它時這不起作用:printf("Value pointed to by gp is:%s\n",(char *)gp);
這是代碼:
#include <stdio.h>
int data[3];
char *words[3];
int main(int argc, char **argv)
{
void *gp;
char *word = "rijec";
printf("%s\n",word);
for(int i = 0; i < 3;i )
{
data[i] = i;
}
words[0] = "zero";
words[1] = "one";
words[2] = "two";
gp = data;
printf("\nAddress of array data is:%p\n",gp);
for(int i = 0; i < 3; i )
{
printf("Value pointed to by gp is %d\n",*(int *)gp);
gp = (int*)gp 1;
}
gp=words;
printf("\nAddress of array of strings words is:%p\n",gp);
for(int i = 0;i < 3; i )
{
printf("Value pointed to by gp is:%s\n",*(char **)gp);
gp = (char **)gp 1;
}
return 0;
}
uj5u.com熱心網友回復:
第 32 行gp包含words存盤陣列的地址(因為陣列字在賦值期間衰減為指標)。該陣列words由 3 個指標組成。當您將其轉換為時,char *您告訴編譯器將此陣列視為其每個元素都是一個char而不是指標。您需要取消參考指標以獲取實際字串。
uj5u.com熱心網友回復:
當你做
gp=words;
words被轉換為指向陣列第一個元素的指標。陣列的第一個元素是 a char*。因此,words轉換為 a char**。所以gp將持有一個型別的指標char**
這就是為什么:
printf("Value pointed to by gp is:%s\n",(char *)gp);
^^^^^^^^
wrong cast
是錯的
和這個:
printf("Value pointed to by gp is:%s\n",*(char **)gp);
^ ^^^^^^^^
| correct cast
|
correct dereferencing
是正確的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/342877.html
下一篇:結構指標未按預期保存字符陣列
