char *a = {"hello"}; 跟char *a = "hello"的区别
答案:7 悬赏:10 手机版
解决时间 2021-04-29 02:15
- 提问者网友:活着好累
- 2021-04-28 11:30
char *a = {"hello"}; 跟char *a = "hello"的区别
最佳答案
- 五星知识达人网友:长青诗
- 2021-04-28 13:00
没什么区别,是一样的意思,只不过是初始化的写法略有不同而已。加与不加大括号对于此时没什么影响,a都是指向"hello"的指针。
如同 int n={2}; 和 int n=2;一样。
如同 int n={2}; 和 int n=2;一样。
全部回答
- 1楼网友:撞了怀
- 2021-04-28 17:45
char *a = {"hello"}; //字符数组
char *a = "hello"; //字符串
其实二者也没什么太大区别的。都可以当作数组来使用。如 a[1]
char *a = "hello"; //字符串
其实二者也没什么太大区别的。都可以当作数组来使用。如 a[1]
- 2楼网友:梦中风几里
- 2021-04-28 16:26
第一个定义的是一个数组,第二个定义的是一个字符串。
- 3楼网友:西岸风
- 2021-04-28 16:18
这个要分两部分看,第一个部分等号前的部分char *a,这个的意思就是定义了一个指针。
后面的部分{"hello"},就是定义了一个数组,而"hello"则是一个字符串。
我们平时定义char a[] 这里的数组名其实也是一个指针。
结合起来看{"hello"},a是一个指针,指向的是数组的第一个元素的地址,即是“hello”这个元素的地址。
后面的部分{"hello"},就是定义了一个数组,而"hello"则是一个字符串。
我们平时定义char a[] 这里的数组名其实也是一个指针。
结合起来看{"hello"},a是一个指针,指向的是数组的第一个元素的地址,即是“hello”这个元素的地址。
- 4楼网友:孤独入客枕
- 2021-04-28 15:43
从语法意义上讲,二者不太一样。但从使用角度来讲,就这个具体表达式,效果是一样的。
二者都是先生成一个常字符串,然后把其首地址(就是字母h的地址)赋给指针p。前者的{}在这里只有“板块”的意思了,所以与没有一样;后者你清楚。二者定义的字符串都是“常字符串”,不能修改。这没有“为什么”,就是这么规定的;想让其可变,就不要定义常量,用char a[]="hello";即可。char a[]="hello"的意思是声明一个数组a,并用一个字符串的“hello"的各位给a的各位对应赋值,并在最后加一位'\0'。
二者都是先生成一个常字符串,然后把其首地址(就是字母h的地址)赋给指针p。前者的{}在这里只有“板块”的意思了,所以与没有一样;后者你清楚。二者定义的字符串都是“常字符串”,不能修改。这没有“为什么”,就是这么规定的;想让其可变,就不要定义常量,用char a[]="hello";即可。char a[]="hello"的意思是声明一个数组a,并用一个字符串的“hello"的各位给a的各位对应赋值,并在最后加一位'\0'。
- 5楼网友:千杯敬自由
- 2021-04-28 14:35
char *str0 = "1234"; //strlen(str0) = 4,sizeof(str0) = 4
char *str1 = "1234\0"; //strlen(str1) = 4,sizeof(str1) = 4
char str2[] = "1234"; //strlen(str2) = 4,sizeof(str2) = 5
以上是在VC++ 6.0环境下的测试结果,这里体现了strlen()和sizeof的区别。
严格地的活,str0和str1是指针,str2是数组,这是其定义方式决定的。
二者的共同点是:
1、都不能改变变量的指向,即str0、str1和str2都不能作为左值(=左边的变量);
2、作为函数参数都会被当作指针看待;
不同点是:
1、在用关键字sizeof计算长度时,数组长度会比字符串长度大1。
2、作为外部变量,char s[]在另一个(或多个)磁盘文件中,不能用char *s来指向s[],反之亦然。
char *str1 = "1234\0"; //strlen(str1) = 4,sizeof(str1) = 4
char str2[] = "1234"; //strlen(str2) = 4,sizeof(str2) = 5
以上是在VC++ 6.0环境下的测试结果,这里体现了strlen()和sizeof的区别。
严格地的活,str0和str1是指针,str2是数组,这是其定义方式决定的。
二者的共同点是:
1、都不能改变变量的指向,即str0、str1和str2都不能作为左值(=左边的变量);
2、作为函数参数都会被当作指针看待;
不同点是:
1、在用关键字sizeof计算长度时,数组长度会比字符串长度大1。
2、作为外部变量,char s[]在另一个(或多个)磁盘文件中,不能用char *s来指向s[],反之亦然。
- 6楼网友:你可爱的野爹
- 2021-04-28 13:32
你这个两个都是字符串。字符串数组char* a[]={"hello","world",NULL}; 这种读法大概可以这样认为,a先和[]构成一个数组,然后数组存放的内容是char*,也就是字符串,联合起来就构成了字符串数组。
char* a={"hello"}为什么不能修改,这个要涉及进程占用的内存分段,大概分为代码区,只读区,全局区,堆区,栈区。"hello"作为一个字符串字面值,是被放在只读区,只读顾名思义就是不能修改的。char* a="hello",相当于把hello的地址赋给了a,故而不能对a指向的内容进行修改。char a[]="hello",这样赋值的就是一个字符数组。字符数组a是在栈区里申请的一个空间给a,然后把只读区的"hello"进行了一次复制再赋值给a,这样a的指向是能修改的。
char* a={"hello"}为什么不能修改,这个要涉及进程占用的内存分段,大概分为代码区,只读区,全局区,堆区,栈区。"hello"作为一个字符串字面值,是被放在只读区,只读顾名思义就是不能修改的。char* a="hello",相当于把hello的地址赋给了a,故而不能对a指向的内容进行修改。char a[]="hello",这样赋值的就是一个字符数组。字符数组a是在栈区里申请的一个空间给a,然后把只读区的"hello"进行了一次复制再赋值给a,这样a的指向是能修改的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯