简单回答一下你的各个问题,
"abcd"汪大是一个字符串,在内存中肯定有自己的地址空间,char *a = "abcd"就是把这个地址空间赋给a保存的。"abcd"本身就是一个地址,因为在c语言中字符串就是对应于一个指针。
int b=5; *a = &b的这个,&b得到的是一个int*,是一个int型的指针,然后还要赋值给*a的话,可以困磨竖知道a的类型是int**,就是指向指针的指针,无论如何,也是指针。所以输出的是地址值。
a作为char*的时候,送给cout的时候实际上是cout按字符串游旦输出,你也可以看到a实际的地址指针值如:
cout << (long)a << endl;
或者你用更直接的方式看:
printf("address of a is %d, string is [%s]\n", a, a);
为了棚枣腔避免LZ混乱,我帮你重写一次:
char *z;
z="abcd";
这段代码,实际上是将字符串abcd中a的地址赋给了指针z。
因链衫为在执行z="abcd"的时候,程序首先在内存分配一个可供字符串abcd存放的内存空间,再将指针z设置为指向这段内存空间的第一个地址,也就是存放字符a的地址。
至于楼主的第二个问题……
注意一下,第一个cout<*a是解除指针引用的意思,也就是代表存放在指针a内的内存地址中所存放的数据。
因此,*a=&b实际意思是岩销把变量b的实际内存地址赋给了a所储存的内存地址。cout的结果自然也就是b的内存地址了。
abcd的埋晌升地址赋给a了,那样的赋值就是给的地址,而输出的时候是要看输出的要求,如果是输出字符,就输出谨型字弯老符了,
第五十六集 指针指猛拦向字枝晌胡谨清符串