char指针数组能否存储字符串?C语言指针数组存字符串疑问
关于C语言指针数组与字符串字面量的解释
首先明确核心点:你看到的"直接存入字符串"其实是C语言的隐式语法特性,本质上存的还是指针,不是字符串本身。
字符串字面量的本质:像
"Zara Ali"这类字符串字面量,编译器会在程序的只读数据区生成一个以'\0'结尾的char数组(比如对应"Zara Ali"的数组是{'Z','a','r','a',' ','A','l','i','\0'})。在表达式中,这个数组会自动隐式转换为指向数组第一个元素的指针(也就是char*类型,指向第一个字符'Z'的地址)。指针数组的初始化:
char *names[]是一个元素类型为char*的数组,初始化时,每个字符串字面量都会被转换成对应的char*指针,然后存储到数组的对应位置。也就是说:names[0]存储的是"Zara Ali"第一个字符的地址names[1]存储的是"Hina Ali"第一个字符的地址- 以此类推
printf的%s格式符工作原理:
printf的%s格式符接收一个char*类型的指针,它会从该指针指向的地址开始,逐个输出字符,直到遇到'\0'为止。所以代码里传入names[i](也就是对应字符串的起始指针),就能正确打印出整个字符串。
额外提醒:字符串字面量是只读的,修改它会导致未定义行为,所以更规范的写法是把指针数组声明为const char *names[],避免误写操作。
内容的提问来源于stack exchange,提问作者Tushar
相关产品推荐
相关产品推荐

