对指针仍有不理解,能否请大神再指导下,先谢谢啊
我对于指针的理解是:
假设有指针P1,那么
P1
--------
123 456
如上123是P1自己的存放地址,456是P1指向的地址
这样对吗?
但是问题来了,如下
char const* ppp="12345";
这里ppp是一个指针?,好吧
ppp自身肯定存在于某个地址,假设是789,这个没错
那么如上申明,就表示自789开始的那个地址空间总共6个字节保存了"12345\0" 呢?
或者说这里的char const* ppp 这个变量保存的不是地址,是一个字符串。
所以char const* 是一种特殊的指针,它并没有指向别的地址?
[解决办法]
int a;
.....
int* p1=&a;
p1是一个内存单元,这个单元的值是变量a的地址,至于p1本身的地址未知
如果想获得p1本身的地址,则使用
int** p2=&p1;获得,p2也是一个内存单元,也就是所谓的指针的指针
[解决办法]
比如0xff38 这个地址存放变量a的值456
int* p=&a
p==0xff38
*p==456
p自己的存放地址为&p.
char const* ppp 和
char* const ppp 是不同的,一个指向的内容是个常量,一个指针不能改变(不能指向其它),看const后面,是*ppp为const还是ppp为const。
以上我的理解,没有常用C语言写程序,具体翻书为准。
[解决办法]
你可以写个小程序还printf各个a,&a,p,&p,sizeof(a),sizeof(p)
[解决办法]
就表示自789开始的那个地址空间总共6个字节保存了"12345\0" 呢?
这句话错了!
789是指针本身的地址,但是只能说指针指向"12345\0"这个字符串的首地址!
或者说789这地址值上的内存空间上存放着"12345\0"这个字符串!
789这个地址值和"12345\0"这个没有关系的!只是指针可以通过789这个地址值找到"12345\0"这个字符串的!
[解决办法]
我对于指针的理解是:
假设有指针P1,那么
P1
--------
123 456
如上123是P1自己的存放地址,456是P1指向的地址
这样对吗?
但是问题来了,如下
char const* ppp="12345";
这里ppp是一个指针?,好吧
ppp自身肯定存在于某个地址,假设是789,这个没错
那么如上申明,就表示自789开始的那个地址空间总共6个字节保存了"12345\0" 呢?
或者说这里的char const* ppp 这个变量保存的不是地址,是一个字符串。
所以char const* 是一种特殊的指针,它并没有指向别的地址?
ppp是一个指针,占4个字节(指针的大小).假设起始地址是789.那么789,790,791,792这四个字节会存放着一些内容.假设是0x12345678.那么0x12345678这个地址开始,存放着“12345”
我觉得#13同學sdu20112013理解有问题啊,32位系统中指针的大小通过sizeof(ppp)可知为4,就是4字节(4BYTE刚好是2的32次方bit),那么这4字节代表什么呢,代表的是ppp自身地址,比如说16进制的0X1234,这个地址位置在内存的栈区,其存储的内容789,是字符串常量“12345”的首地址,而789这个地址位置在内存的文字常量区,其存储的内容为字符串“12345”的第一位,那么790就指字符串的第二位,依此类推。