永发信息网

char* p = “abc”; 为何打印p会输出abc,p明明是个指针。编译器内部做了什么工作吗

答案:1  悬赏:0  手机版
解决时间 2021-04-01 09:21
  • 提问者网友:我是女神我骄傲
  • 2021-03-31 22:02
char* p = “abc”; 为何打印p会输出abc,p明明是个指针。编译器内部做了什么工作吗
最佳答案
  • 五星知识达人网友:纵马山川剑自提
  • 2021-03-31 23:36
这个不是表示相等。这个叫做赋值,等号又叫做赋值运算符,判断相等的是用两个等号,关系运算符==。
接下来给你解释这句话,这条语句首先声明了一个字符型的指针变量,指针是用来存储地址的,那么右边则是一个字符串常量,字符串常量就是一个地址,表现形式就是这个字符串的首地址,用一个字符型的指针指向一个首地址,那么通过这个指针就可以访问整个字符串了。不管是变量还是常量,在内存中都有对应的存储空间,这句话就是用一个字符型的指针存储了一个字符串的首地址。还不懂可以追问追答不是内部做了什么工作,是因为字符串的表现形式就是以首地址的形式进行的,就好像我们可以用一个整型指针来指向一个整型数组一样,
int a[10]={1,2,3,4,5,...};
int *p=a;
实际上原理是一样的,只不过数组a是一个变量,但是数组的存储方式,第一,数组是相同数据类型的集合,第二站用连续的存储空间。数组变量的数组名就是这段连续内存空间的首地址。那么字符串常量同样满足这两条。字符串也是相同的数据类型的集合,也是连续的存储空间,只不过没有数组名,因为它是个常量。但是并不影响通过首地址对它进行访问,字符串又可以看作特殊的字符数组,用指针变量如何存储的数组首地址,这个就是怎么存储的。希望能够帮到你,看你这么晚还在提问,说明你有心学好C语言,为了鼓励你。我也是用手机给你回答的。加油追问那么编译器只知道首地址的话,如何把字符串的全部都输出。它是否有进行字符串长度的判断什么的追答访问首地址就是访问整个字符串了。字符串从首地开始每个字符依次向后访问,遇到,‘\0’结束标识符时结束追问那么如果string str = "aab",然后输出str呢,这个是判断长度是吗,是str里面存储的是字符指针首地址和字符长度。还是像你说的遇到/0结束追答str里面存储的就是个首地址,从str存储的那块地址开始,一直到/0结束追问那么sizeof(str)是否等于4在32系统下还是string类内部还有其他的虚函数表?(没有吧),或者其他的属性我这两句话对吗追答当然有其他函数。。。首先纠正你一个错误,sizeof不是一个函数,虽然长的很想函数,单其实sizeof是一个计算变量所占内存空间字节数的“运算符”,记住了sizeof是个运算符,不是什么函数。。。在32位操作系统里你这个字符型的指针存储的是地址,不管你的字符串多长用sizeof的结果都是4,因为一个指针(不管任何类型的指针占用内存数都是4个,因为一个字节是8为,四个字节正好是32位,地址的表现形式就是32个二进制位。)str里面存储的是地址,所以结果就是4.
想计算字符串长度有函数可以实现,strlen()需要包含头文件#include
29696683是我的QQ有问题可以加我。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯