C++ char a='f'; char* g=&a;为什么输出了f烫烫烫..H c++指针强制类型转换 unsigned int a = 0...

c++ \u8bed\u8a00\u4e2dchar a="a"\uff1b \u548cchar a='a' \u6709\u4ec0\u4e48\u533a\u522b

\u201ca\u201d\u8868\u793a\u5b57\u7b26\u4e32\uff0c\u5b57\u7b26\u4e32\u957f\u5ea6\u7b49\u4e8e\u5185\u5bb9\u52a0\u2018\0\u2019\u7684\u957f\u5ea6\uff0c\u6240\u4ee5\u662f\u5360\u7528\u4e24\u4e2a\u5b57\u8282\u5185\u5b58\u3002\u2018a\u2019\u8868\u793a\u5b57\u7b26\uff0c\u5360\u7528\u4e00\u4e2a\u5b57\u8282\u5185\u5b58\u3002\u800c\u4e00\u4e2a\u5b57\u7b26\u53d8\u91cf\u957f\u5ea6\u6c38\u8fdc\u4e3a1\u5b57\u8282\uff0c\u6240\u4ee5\u524d\u8005\u5199\u6cd5\u9519\u8bef\uff0c\u5e94\u8be5\u5199\u6210 char *a = "a"\u3002

\u95ee\u9898\u591a\u4e86\u53bb\u4e86\uff0cchar*\u80fd\u8f93\u51fa\u6b63\u786ehi\u8fd0\u6c14\u597d
\u9996\u5148int\uff0c4\u5b57\u8282\uff0c\u4ed6\u5728\u5185\u5b58\u4e2d\u662f\u53cd\u7740\u5b58\u7684\uff0c\u5c31\u662f\u8bf4\u5185\u5b58\u4e2d\u7684a\u5176\u5b9e\u662fF7 FF FF FF
\u4f60\u5b9a\u4e49\u7684char*b\uff0c\u5176\u5b9eb\u6307\u5411\u7684\u5c31\u662fF7\uff0c\u7531\u4e8e \u5b9a\u4e49\u7684\u662f\u6709\u7b26\u53f7\u7684\uff0c\u6240\u4ee5\u524d\u9762\u591a\u4e866\u4e2aF\uff0c\u65e0\u7b26\u53f7\u5c31\u80fd\u6b63\u786e\u3002
\u8fd8\u6709\u5c31\u662fprintf("%08x", *b);\u8fd9\u4e1c\u897f\u662f\u65e0\u6cd5\u8f93\u51fa4\u5b57\u8282\u7684\uff0c
printf("%02x", *b);

printf("%02x", *(b+1));\u7528\u8fd9\u6837\u6765\u8f93\u51fa

char* p和char *p单独来看没区别,但是假设你写
char* p,a;
char *p,z;
一般来说有区别,第一句a和p都是char*类型,第二句p是char*类型,z是char类型

C++ char a='f'; char* g=&a;为什么输出了f烫烫烫..H
虽然说char*确实可以理解为字符型指针,其中包含的也确实是地址,不过C/C++这样的较底层语言,为了实现类似“字符串”的功能,char*被赋予了一个更一般的意义,就是“C风格字符串”,C风格字符串是一个以全零(即二进制位全零)字节为结尾的字符串,例如
char* a= "abc";
a是一个指针,指向了字符串"abc","abc"是三个字符,但是其实占用了4字节的空间,因为在abc之后还有一个隐藏的全零字符,代表着字符串的结尾,全零字符如果在程序里面写的话可以写作'\0'
你的char*g指向了a的地址,因为g是char*,所以编译器一般的认为它是一个C风格字符串,故输出字符'f'之后还不断输出,直到找到一个全零字符才结束,烫这个字只是凑巧后面的字节刚好可以被编码为汉字烫而已,并没有特殊意义

如果你实在想输出一个地址,可以把char*类型强制转换,例如转换成int*,毕竟指针的大小肯定都是一样的

cout把g当做字符串来输出了,相当于printf("%s", g),所以输出信息是:f....(f是g指向的第一个字符,后面就不一定是什么字符了,因为根本没有定义过)
如果相输出g的值(a的地址),应该使用 cout<<(void*)g<<end;

char* p和char *p没区别,* 靠近那边要看习惯,一般习惯靠右边。

你的输出语句是什么?一般是内存的问题
char* p 和 char *p是一样的,看你自己的书写习惯

后两个没有什么区别,是一样的意思

前面的那个问题,你输出的是g还是*g

扩展阅读:morphy richards ... dev c++ ... c++编程 ... cstring ... c++printf ... c++教程 ... char a[10] ... c++float ... c++int ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网