*d 的内容不就是个字符串吗
追答没错,*d的内容是个字符串,但是%s后面的参数表列要求是指针。
那跟char s[]有什么区别呢,&s 不就是S的地址吗(第一个字节存放的位置),&S难道是指“S”名字的地址?那 为什么int e=56,,&e就是就是56的这个数字的地址呢
追答&是取地址运算符!&s是s名的地址,数组名s是存放数组中第一个字符地址的常量!
变量名字只是一个让人识别的代号,在转变为exe的汇编代码后,这个d是没有意义的,不存在的
ffb1是给d申请的内存空间,存放d的数据,也就是一个指针,地址
打印*d时,只是打印一个地址,%s时是没有意义的
d时,打印%s,那么就打印这个地址指向的字符串的首地址,从而打印那个hello字符串
如果你定义一个char数组,让d指向这个数组,那样更好理解一些
不知道这样对不对,但是我发现char b[]的&b ,每次都在变化,不是说这个数据地址不会变的吗
一个程序,他一般都会有一个数据段.data,程序段.code
一般来说,是程序段中的程序代码对数据段中的数据进行操作
每个变量都会在数据段有内存空间进行存储这个变量的数据
也就是常说的变量的内存模型
现在讨论的就是关于这个方面的问题,还牵扯到寻址问题
变量名在data段是没有意义的,他只是为了让人好记,标记的内存地址而已
如char b[],在变成exe后,只会是一个ffc1地址而已
指针,他的内存空间中存放的数据是一个内存地址
如你图中的样子,ffb1中存放的是ffc1这个数据,访问ffb1时,就是访问ffc1这个数据
在%s打印中,*d就是访问ffc1这个数据,而不是ffc1这个地址
加*,是访问这个数据,
不加*,是当地址使用
*d 里的内容不就是那个字符串吗