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

关于C语言指针数组与数组指针初始化报错的技术咨询

数组指针初始化报错原因解析

问题场景

课堂上讲解的两种代码写法:

  1. 指针数组定义:
char* words[]={"one","two","three"};
  1. 数组指针声明:
int (*table)[3];

课后自行编写的报错代码:

char (*word)[6]={"one","two","three"};

编译器报错:scalar object 'xxxx' requires one element in initializer

可正常运行的写法:

char table[][6]={"one","two","three"};
char (*word)[6]=table;

报错原因

char (*word)[6]是指向长度为6的char数组的指针,属于C语言中的标量类型(单个指针变量)。标量类型在初始化时只能接收单个初始值,但你传入了包含3个元素的初始化列表{"one","two","three"},这不符合C语言的初始化规则,因此触发报错。

正确写法的逻辑

char table[][6]={"one","two","three"}定义了一个二维char数组,编译器会自动推导第一维的长度为3(对应3个字符串元素)。二维数组的首地址本质就是指向第一个长度为6的char数组的指针,因此可以直接赋值给char (*word)[6]类型的指针变量,这完全符合类型匹配规则,所以能正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 05:10:19