这似乎是一个愚蠢的问题。我有一个字符数组,想要将数组的地址存储在另一个变量中,但似乎无法声明数组地址的正确类型(我正在使用 gcc):
\n在:
\nint main(void){\n char cha[] = "abcde";\n char **arrayAddress = &cha;\n}\n
Run Code Online (Sandbox Code Playgroud)\n出去:
\narrayaddress.c: In function \xe2\x80\x98main\xe2\x80\x99:\narrayaddress.c:3:25: warning: initialization of \xe2\x80\x98char **\xe2\x80\x99 from incompatible pointer type \xe2\x80\x98char (*)[6]\xe2\x80\x99 [-Wincompatible-pointer-types]\n 3 | char **arrayAddress = &cha;\n | ^\n
Run Code Online (Sandbox Code Playgroud)\n这是预期的,我在其他地方读过, 的类型cha
应该是char(*)[6]
. 但是当我尝试arrayAddress
用这种类型声明时,我的程序失败了:
在:
\narrayaddress.c: In function \xe2\x80\x98main\xe2\x80\x99:\narrayaddress.c:3:25: warning: initialization of \xe2\x80\x98char **\xe2\x80\x99 from incompatible pointer type \xe2\x80\x98char (*)[6]\xe2\x80\x99 [-Wincompatible-pointer-types]\n 3 | char **arrayAddress = &cha;\n | ^\n
Run Code Online (Sandbox Code Playgroud)\n出去:
\narrayaddress.c: In function \xe2\x80\x98main\xe2\x80\x99:\narrayaddress.c:3:10: error: expected identifier or \xe2\x80\x98(\xe2\x80\x99 before \xe2\x80\x98)\xe2\x80\x99 token\n 3 | char (*)[6]arrayAddress = &cha;\n | ^\nmake: *** [<builtin>: arrayaddress] Error 1\n ^\n
Run Code Online (Sandbox Code Playgroud)\n我该如何arrayAddress
正确定义?
这个已经写完了:
char (*arrayAddress)[6] = &cha;
Run Code Online (Sandbox Code Playgroud)
请注意,变量的名称隐藏在表达式的中间。