char *str = “hello”表示在动态变量区开辟一个存放指针的存储单元,指针变量名为str,这个str指向常量区的”hello”,因此不能更改这个字符串的值,比如str[0]='e'这样不行。char str[] = "hello"表示在动态变量区开辟一个能连续存放6字节的字符串数组,str是数组名称,其数组内容可以被修改,定义在函数中因为是局部变量不能return。
字符串数组定义
char s1[5] = {"abcd"}等同于char s1[5] = "abcd"
sizeof(s1) = 5,strlen(s1) = 4char s2[5] = {'a','b','c','d'}
sizeof(s2) = 5,strlen(s2) = 不确定数char s3[] = {"abcd"}等同于char s3[] = "abcd"
sizeof(s3) = 5,strlen(s3) = 4char s4[] = {'a','b','c','d'}
sizeof(s4) = 4,strlen(s4) = 不确定数
总结:定义成“ ”双引号格式的话,会自动加’\0’结束符,strlen计算字符串长度时遇到’\0’结束(其计算的长度不包括’\0’),sizeof是运算符,计算的是分配的内存大小。定义字符串的话尽量用char s[5] = “abcd”(要给’\0’留一个字节的位置)或者char s[] = “abcd”(最推荐)。
sizeof与strlen的区别详细参考: https://blog.youkuaiyun.com/magic_world_wow/article/details/80500473
本文介绍了char* str和char[] str的区别,涉及内存分配、字符串常量与可变数组,以及sizeof和strlen函数的用法。重点讲解了双引号定义字符串的自动结束符和计算方式。
3459

被折叠的 条评论
为什么被折叠?



