此问题已在此处有答案:
Array of pointers to an array of fixed size(9个回答)
上个月关门了。
编译器给了我以下错误:
[警告]来自不兼容指针类型的赋值
这是我的尝试;
char (*array[10])[20],string[20] = "AEIOU"; array[2] = string;
Array of pointers to an array of fixed size我已经找到了这个问题,但没有用.
此问题已在此处有答案:
Array of pointers to an array of fixed size(9个回答)
上个月关门了。
编译器给了我以下错误:
[警告]来自不兼容指针类型的赋值
这是我的尝试;
char (*array[10])[20],string[20] = "AEIOU"; array[2] = string;
Array of pointers to an array of fixed size我已经找到了这个问题,但没有用.
4条答案
按热度按时间rnmwe5a21#
定义指向字符串的指针数组的最“自然”的方法:
这将
array
定义为指向char
的10个指针的数组。然后
使元素
i
指向string
的第一个字符。从这个赋值中,
array[i]
基本上是string
的别名。或者如果你真的想要一个指向数组的指针:
注意这里使用了指向操作符
&
,以获取指向数组本身的指针。还要注意的是,这与上面显示的更“自然”的方式非常不同。这完全取决于您实际想要实现的目标,您的实际用例和问题是什么。当前显示的代码是
string
* 衰减 * 为指向其第一个元素的指针,因此string
与&string[0]
相同。类型为char *
。您当前将
array
定义为指向数组的指针数组,因此array
的每个元素都具有char (*)[20]
类型。这就是&string
的类型。qeeaahzv2#
你正在定义
char (*array[10])[20]
,它声明了一个10个指针的数组,每个指针指向一个20个字符的数组(正确)。但在下面这行:
它将显示警告“assignment from incompatible pointer type”,因为在C/C++中,类型不兼容,所以在没有适当的类型转换的情况下,这是不允许的。在你的例子中,你试图将一个字符数组
string
分配给一个指向字符数组的指针数组的元素。这将是一个警告。您可以更改为使用此选项来忽略警告:
array[2]将保存
string
数组的地址,它指向字符数组。因此,该分配是兼容的。nc1teljy3#
C
编译器不按使用的行收费。每一行只写一件事。
对比
与
一行一行
这是可以的,但你应该总是使用
const
作为提醒自己。如果你这样做,错误地尝试为string
分配一些值,编译器会警告你,而不是当你的代码崩溃时在电话里的人。每个
array
都是一个指向char[20]
的指针,所以缺少一个&
。写:不是初始化器
这是个任务。不是初始化器。
这是一个初始化器:
这个程序
指纹
注意
string
是const char[20]
vatpfxk54#
对于OP:你过度考虑了数组声明,每个数组[N]已经是一个数组指针,例如,数组[2]已经是一个数组指针:
或