bar*_*ool 4 c arrays pointers casting anonymous-arrays
是否可以创建这样的匿名数组?
char **values = (*char[]){"aaa", "bbb", "ccc"};
Run Code Online (Sandbox Code Playgroud)
此方法有效:
char **values
char *tmp[] = {"aaa", "bbb", "ccc"};
values = tmp;
Run Code Online (Sandbox Code Playgroud)
是的,您可以使用复合文字来做到这一点(它创建一个可以获取其地址的匿名对象)。您只需要正确获取该复合文字的类型(在您的情况下它将是char*[]),然后使用&运算符获取其地址:
#include <stdio.h>
int main()
{
// The outer brackets on the RHS are not necessary but added for clarity...
char *(*values)[3] = &( (char* []) { "aaa", "bbb", "ccc" } );
for (int i = 0; i < 3; ++i) printf("%s\n", (*values)[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以利用这样一个事实:数组(即使是定义为复合文字的数组)将自动“衰减”到指向其第一个元素的指针(在大多数情况下,包括用作赋值操作的 RHS 时):
int main()
{
char** values = (char* []){ "aaa", "bbb", "ccc" };
for (int i = 0; i < 3; ++i) printf("%s\n", values[i]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |