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

C语言程序输出疑问:为何结果是abcbcc?printf参数为何用&?

问题解答

一、为什么输出是abcbcc而不是abc

首先明确二维数组x[3][4]的内存布局:
因为strcpy(x[i], ch)会把字符串"abc"(包括末尾的'\0')复制到每行,所以每行的4个字符是'a'、'b'、'c'、'\0',内存里连续存储结构如下:

x[0]: a b c \0
x[1]: a b c \0
x[2]: a b c \0

第二个循环中,printf("%s", &x[i][i])是从&x[i][i]指向的地址开始输出字符串,直到遇到'\0',而非输出单个对角线字符:

  • 当i=0时,&x[0][0]指向第一行的'a',输出完整字符串"abc";
  • 当i=1时,&x[1][1]指向第二行的'b',从这里开始输出到末尾的'\0',结果是"bc";
  • 当i=2时,&x[2][2]指向第三行的'c',输出字符串"c";

将三部分输出内容拼接,最终结果就是abcbcc。

二、为什么printf里需要&

printf("%s")要求传入的参数是字符指针(char*),用来指定字符串的起始地址:

  • x[i][i]是单个char类型的字符,直接传入会把该字符的ASCII值当作内存地址,导致访问非法内存,属于未定义行为;
  • &x[i][i]是取该字符的地址,类型为char*,完全符合%s格式符的参数要求,能正确指向要输出的字符串起始位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 15:40:37