社区
C语言
帖子详情
为什么char a[5]="hello"也可以?
KeleQAQ
2018-05-11 08:48:12
...全文
2845
6
打赏
收藏
为什么char a[5]="hello"也可以?
[图片]
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
6 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
dululululu
2018-05-12
打赏
举报
回复
char 是字符型变量可以存储字符,可容纳单个字符的一种基本数据类型 char a[5] char a[5] = {'h','e','l','l','\0'};后面更者“\0”占一个字节,每一个字母都是用单个字符表示,于是字母“o"没有地址存放 char a[5]="hello"是正确的代表一个字符串,是正确形式 能达到相同目的的方式还有 char *a[5] = "hello" 定义一个char类型指针a,*符号,在定义的语句中,表示声明了一个指针的类型.
赵4老师
2018-05-12
打赏
举报
回复
为什么人走铁道也可以?
KeleQAQ
2018-05-11
打赏
举报
回复
ASCII码没有0,还是有点不清楚
KeleQAQ
2018-05-11
打赏
举报
回复
感觉6和7是矛盾,答主那个第2段话是说,比如char a[4]="abc",那 '\0' 就在a[3]上吗?@云海玉弓缘
云海玉弓缘
2018-05-11
打赏
举报
回复
首先,C语言没有字符串变量,只有字符串常量,所以字符串变量的任务就交给字符数组解决了! 字符串常量:"qwer" 这是一个字符串常量,字符串常量会在结尾加一个结束符'\0',所以这个字符串常量的实际长度为5 字符数组:char[5]; 1.首先,这个字符串数组的长度为5,这一定没问题:从c[0]到c[4]。 2.然后,这其中字符数组必须也有一个结束符号'\0',它在最后一个有意义的字符之后的一个位置(如果有意义的字符是2个的话,结束字符就在a[2]上,如果有意义的字符是3个的话,结束字符就在a[3]上) 1.char[5]={'q','w','e','r'}(正确写法,末尾自动添加结束符) 2.char[5]={'q','w','e','r'.'t'};(错误写法,编译器不会报错,输出字符串数组名的时候结尾会有烫烫烫) 3.char[]={'q','w','e','r'};(错误写法,编译器不会报错,输出字符串数组名的时候结尾会有烫烫烫,因为并不知道字符串的长度,无法推断出结束符的位置,可以理解为编译器不那么智能) 4.char[]={'q','w','e','r','\0'};(正确写法,编译器可以推断出字符串结束符号的位置) 5.char[5]="qwer";(正确写法,末尾自动添加0) 6.char[5]={"qwer"}(正确写法,末尾自动添加0) 7.char[5]="qwert"(正确写法,末尾自动添加0) 8.char[5]={"qwert"}(错误写法,编译器会报错) 9.char[]="qwer"(正确写法,结尾自动添零,推断出字符串长度) 10.char[]={"qwer"}(正确写法,结尾自动添零,推断出字符串长度) 11.char[5]; a[0]='q' a[1]='w' a[2]='e' a[3]='r' (错误写法,编译器不会报错,输出字符串数组名的时候结尾会有烫烫烫)
wang0635
2018-05-11
打赏
举报
回复
编译器不负责任呗
char
*a = “
hello
“;
char
*b = “
hello
“; if(a= =b) printf(“YES“); else printf(“NO“);
#include "stdafx.h" #include<stdio.h> #include<string.h> int main(void) { const
char
*a = "
hello
"; const
char
*b = "
hello
"; if (a == b) printf("YES\n"); else printf("NO\n&q
char
*s = “
hello
” 和
char
s[] = “
hello
” 的区别
char
*str = “
hello
”表示在动态变量区开辟一个存放指针的存储单元,指针变量名为str,这个str指向常量区的”
hello
”,因此不能更改这个字符串的值,比如 str[0]='e’这样不行。
char
str[] = "
hello
"表示在动态变量区开辟一个能连续存放6字节的字符串数组,str是数组名称,其数组内容可以被修改,定义在函数中因为是局部变量不能return。 ...
char
*n="
hello
"和
char
a[]="
hello
"的区别
char
*n="
hello
"和
char
a[]="
hello
"的区别: 1. 变量n位于栈上,其内容是一个地址,指向位于文字常量区的“
hello
”,此时“
hello
”在内存中只有一份拷贝; 2. a是一个位于栈上的有6个元素(含字符串末尾的空字符)的数组,并将“
hello
”拷贝到它所占的内存中,此时“
hello
”有两份拷贝。 ...
为什么
char
a[]的a不能用a=“
hello
”来赋值?
char
* b里面的b是一个指向
char
的指针,而b可以用b=“
hello
”来复制。同样,a代表
char
数组的第一个元素的指针,类型应该也是
char
*,为什么b可以直接用赋值符号而a不可以呢?
C/C++中
char
* p = “
hello
world“ 和 const
char
* p = “
hello
world“的区别
这个行为在不同的c和c++的编译器上有会不同的行为,应该说
char
*a = "
hello
world";这种写法不能算错误的写法,所以c编译器不报错也不警告。早期的K&C认 为这是完全合法的,但从K&C第二版标准开始就明确指出“修改string literal的结果是未定义的,字符串并不总是可修改的,可能会放在只读内存区域“。从C89开始,这个问题有了更明确的规定。
char
*a = "
hello
world";定义a是一种字符指针类并使用指定的字符数组(类型为array of
char
)
C语言
70,020
社区成员
243,263
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章