关于 指针和内存 的问题,请高手帮忙

来源:百度知道 编辑:UC知道 时间:2024/06/07 06:38:04
请高手帮忙:
如果已经定义了 char *s = "abc" ;
char *p = s ; 与 char *p =(char *)&s ;

它们本质上的区别在哪,为什么这样做(其实主要请教后者的本质) ?

分析char *p =(char *)&s;
s是字符的指针,&s字符的指针的地址,
p是字符的指针,(char *)强制转换把(字符的指针)的地址转换为(字符)的指针。
那么原本代表字符的指针的信息成为了字符,这是毫无意义的。因此,表达式是错误的。

先汗一下..............-_-!
C推荐char *p = s的结构,因为s是字符指针,非常符合C的正常逻辑规定。至于后者char *p = (char *)&s是符合C的语法,但是&s是字符指针的指针(char *)*,数据类型上本来是不匹配的,但是用了(char *)进行强制类型转换当然就没问题了,但是极可能引起逻辑上的错误,建议使用如下声明:char ** p = &s,读取"abc"的第一个字符可以这样写**p,理解起来应该是p保存了s这个变量的内存地址,然后通过(*p)来读取s的值,而s的值是字符'a'的内存地址,通过*(*p)就可以读出字符'a'来了。如此类推,读取字符'b'可以这样写,*(*p + 1)。