【发布时间】:2015-07-16 02:00:23
【问题描述】:
我需要在 array[3][3] 上放置 3 个字符串。
我试着用指针来做,但我只收到一个字符。
#include <stdio.h>
int array[3][3]
char thing[5] = "thing";
main()
{
thing = array[0][0];
printf("%s", array[0][0];
}
【问题讨论】:
-
请注意,您的数组定义为 int。
-
@EOF 数组在 C 中不是“不可变的”——字符串 literals 是,但
thing[5]是一个可变数组,由 5 个字符组成,初始化为包含't', 'h', 'i', 'n', 'g'。它是有道理的并且是有效的 C,它只是不是 C 字符串,因为缺少终止 NUL。删除5将使其成为 6 个字符的数组(由编译器自动计数以包含 NUL) - 这将是一个有效的字符串,但仍然是可变的,因为它仅从字符串文字初始化,而不是指向一个的指针。 -
@Arkku:不。数组 是不可变的。它们的内容可能是可变的,但数组本身不是。
-
@EOF 啊,您的意思是分配给
thing- 这确实是错误的,因为thing不是指针。但是说“数组是不可变的”是错误的,因为不可变数组是const数组,而事实并非如此。正确的意思是“你不能分配给一个数组”(或者,更专业地说,“数组不是左值”)。 -
@EOF 我只是想补充一点,我不想听起来充满敌意;我确实明白你关于数组地址不可分配的观点,但我不同意这个术语:根据这个论点,有人可能会说,例如,
int i是不可变的,因为&i = p是无效的,只有内容的i(单个int)是可变的……数组不是指针,因此不存在不允许赋值的不可变指针。只有数组,它是它的内容,而仅此而已,因此如果内容是可变的,它就是可变的。 =)