C 带指针的复合文字

C 带指针的复合文字,c,C,要将2d数组传递给内嵌数组的函数,可以执行以下操作: void print_arr2(int (*arr)[3], size_t size); print_arr2((int[2][3]) {{1,2,3}, {3,6,9}}, 2); print_arr2((int[][3]) {{1,2,3}, {3,6,9}}, 2); 但是,以下符号似乎不受支持,或者我输入的符号不正确: print_arr2((int(*)[3]) {{1,2,3}, {3,6,9}}, 2); // pointe

要将2d数组传递给内嵌数组的函数,可以执行以下操作:

void print_arr2(int (*arr)[3], size_t size);

print_arr2((int[2][3]) {{1,2,3}, {3,6,9}}, 2);
print_arr2((int[][3]) {{1,2,3}, {3,6,9}}, 2);
但是,以下符号似乎不受支持,或者我输入的符号不正确:

print_arr2((int(*)[3]) {{1,2,3}, {3,6,9}}, 2); // pointer to int [3]
最后一种格式不受支持,或者是什么原因导致它无法尝试使用复合文字?

(int(*)[3]){1,2,3},{3,6,9}
创建一个复合文字,它是指向三个
int
数组的指针,然后尝试用三个
int
的两个列表初始化它。指针必须用地址初始化


一个解决方案是创建一个2×3数组,该数组将自动转换为指向其第一个元素的指针,生成一个指向三个数组的指针:
(int[2][3]){{1,2,3},{3,6,9}

记住复合文字初始化,{code>{1,2,3},{3,6,9}描述的是数组,而不是指针。指针需要
NULL
或数组位于内存中的有效地址。初始值设定项不是存储在内存中的对象。基本上,您所做的工作相当于
int*p={1,2,3}
;`。在最后一种情况下,没有要指向的数组。如果使用上一个定义数组,则可以强制转换它,例如
print_arr2((int(*)[3])(int[][3]){…},2)可以用。@dxiv很酷,谢谢:
打印arr2((int(*)[3])(int[2][3]){{1,2,3},{3,6,9},2)
请发布
print\u arr2()
@chux的声明。