char arr[]="hello";
为什么可以这样写,明明字符串常量的值是地址,arr数组里面的数据类型是char
这是内部的编译机制,"hello" 是一个字符串常量,它在内存中会存储成一个以 null 字符结尾的字符数组,所以和 char[] 类型是符合的。
这叫初始化, 和普通赋值不一样
数组arr,其元素arr[i]>=0,arr的任意子序列和为sum,给定一个数m,sum%m 的最大值是多少?
在C语言中,我们可以使用字符串常量为字符数组赋值的原因是字符串常量实际上是一个字符数组的地址。在C语言中,数组名代表数组首元素的地址,所以字符串常量的地址可以赋值给字符数组名。在赋值过程中,字符数组名所代表的地址会指向字符串常量的地址,即字符数组中的第一个元素就是字符串常量的首地址,这样就可以通过字符数组名来操作字符串常量。例如:
char str[10] = "hello"; // 字符串常量"hello"的首地址可以赋值给字符数组str
printf("%s", str); // 输出结果为"hello"
需要注意的是,为了避免在字符串常量的末尾添加一个没有被初始化的字符'\0'导致程序崩溃,C语言编译器会自动在字符串常量的末尾添加一个字符'\0',作为字符串结束符,所以在字符数组中保存字符串时,需要预留一个位置用来存放字符串结束符。