定义一个结构体,结构体的第一个成员是一个字符变量,然后在主函数里创建一个这个结构体的对象,取这个对象的在结构体中的第一个字符变量的地址,在winxp系统下显示出来的是乱码,在安卓手机上的AIDE下运行也没有正常显示出来,而把结构体的第一个变量定义成如int型的其他类型的变量就可以正常显示出地址,这是为什么
http://codepad.org/KN0BlwkH
-2639232
-2639228
-2639220
double int都是4字节,char虽然只有1字节,但是编译器按照4字节对齐
所以地址连续相差4
为什么是负的,因为地址最高位是1
额。。。昨天就看到这个问题了,睡前想了想。不敢乱回答。
现在用VS实验了。
说说我的看法。
楼主所说的乱码,不出意外应该是烫烫烫,这个代表输出了一个没有初始化的值。看楼主的代码是直接输出&A.a,以前我也探讨过,对于一个char或者char数组类型,cout它的地址,会直接输出这个地址里面的内容。测试可以是char *pStr=" test word";cout<<pStr,得到的是test word,而不是地址。
若楼主在cout<<&(A.a)之前,添加一句A.a='A',这样会输出一个A+烫+一段乱码。为什么还会有乱码+烫。这是cout输出一个字符所决定的,记得定义一个字符数组后面必须要加一个‘\0’标记结尾。楼主直接输出一个char 类型的地址,编译器找不到‘\0’,就会一直向后面输出,要是楼主再改一下代码:struct Test1{char a,char b,double c,double d};int main(){Test1 A;A a='A';A.b='\0';cout<<&(A.a)<<endl}这样就会只输出一个A,
最后,再次说明为什么int类型能够输出地址,这是由cout输出不同的类型所决定的。