兄弟,你这个小问题关联了很多知识点,给你拆分一下 1:数组,定义时就确定存储地址,在内存中开辟一段存储空间。使用时地地址是不可变的,和指针最大的区别所在。所以字符数组定义时要么明确数组下标,要么用双引号赋字符串。其它类型数组定义时,原则一样。 2:字符数组赋值,你要理解为只有两种方法,一,定义时,直接赋字符串,如 char str[20]=“hello!”,二,定义过后,只能单个字符赋值,如 str[0]='f'。 3:单引号和双引号。单引号就是字符,双引号是字符串,但有更多意思:把双引号内的字符数据,按顺序并尾部加'\0',存放在内存中,并返回存储位置的首地址。 4:结尾符号,'\0',其实就是数值0,在字符数组中,你加不加结尾符,没规定,看你怎么处理其中数据而已,很灵活的。如,使用printf函数,必须加,如果你没0结尾,它从数组首地开始读取并输出,可能一个也不输出,也可能输出十万个,直到遇到第一个0,和数组多大没关系。 所以,你代码中有个明显错误, 1:第五行,str[0]赋值只能用单引号,单个字符赋值。如果用双引号,不是赋值,是赋字符串地址,数据定义过后,是不能改地址的。 2:第五行中,你想把双引号中的数据赋给[0],但双引号其实是提取字符串地址的,地址是32位,而你str是8位的,所以,这一句是把“F”的内存地址的低8位值赋给[0] 3:然后,当你puts(str),是把“F”字符串地址的低8位,以字符形式输出了
69,371
社区成员
243,082
社区内容
加载中
试试用AI创作助手写篇文章吧