You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 02:00:03