C语言中指向指针变量的问题

来源:百度知道 编辑:UC知道 时间:2024/06/06 04:40:36
char a;
char *b=&a;
1.char **s=&b;
2.char **s=b;
这两种哪一种是错误的,哪一种是正确的啊,我认为1是正确的,可我朋友说2也正确,还涉及到覆盖之内的说法

第一种正确
如果进行显式类型转换,例如:char **s=(char **)b,第二种也正确,这样实际上是将a变量的值作为一个地址看待,可是解引用时可能会出错,例如:
printf("%c\n", *s);错误,不过printf("%c\n", *s);正确

2不对吧
char **s要求s指向一个char*的变量地址也就是&b
而不是指向一个char*的变量b

1和2都是正确的。2中因为char *b=&a;
b已经是一个指针了,它存的是一个地址

当然是1正确啊.b是一级指针,s是二维指针,s=b当然不行

当然是1正确。
s是指向指针的指针,其值应该是一个指针变量的地址,即&b。
而“b”的值是变量a的地址,即&a。
所以,上面的2就相当于char **s=&a;
很明显,这是不对的!1正确。

覆盖之说谈何说起?
很简单,一个是一级指针,一个是二级指针。char **s=b; 编译通不过