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

C编程数组指针问题:为何运行代码仅输出单词首字母而非完整单词

问题原因分析

你遇到的问题本质是对C语言多级指针、指针数组的解引用规则理解有误,我们先拆解你提供的代码逻辑:

#include <stdio.h>
int main()
{   
    char *fruit[] = {
        "watermelon", "banana", "pear", "apple"};
    int x;
    for(x = 0;x<4; x++){
        putchar((** fruit) +x );
        putchar('\n');                                         
    }                                                          
    return 0;
}

核心错误点

  • char *fruit[] 是字符指针数组,共存储4个char*类型的指针,分别指向4个字符串常量的首地址。
  • 表达式**fruit的取值是固定的:fruit作为数组名退化为指向首元素的指针,第一次解引用*fruit得到第一个元素的值(即字符串"watermelon"的首地址),第二次解引用**fruit得到该地址对应的字符,也就是常量'w'。
  • 你当前写的(** fruit) +x实际是对'w'的ASCII码值做加法,循环输出的结果为w/x/y/z,和数组里其他3个单词完全无关。
  • 如果你的实际运行结果是输出了4个单词的首字母w/b/p/a,说明你实际代码写错为**(fruit + x):这种写法仅能拿到第x个字符串的第一个字符,自然只会输出首字母。
正确实现

输出所有单词的首字母

for(x = 0;x<4; x++){
    // 等价于 putchar(**(fruit +x))
    putchar(*(fruit[x]));
    putchar('\n');
}

输出完整单词

直接传入第x个字符串的首地址给字符串输出函数即可,%s格式符/puts会自动从首地址开始输出直到遇到字符串结束符\0:

for(x = 0;x<4; x++){
    // 等价于 printf("%s\n", fruit[x])
    puts(fruit[x]);
}

内容的提问来源于stack exchange,提问作者bini_01

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 07:54:08