C 带指针的复合文字
要将2d数组传递给内嵌数组的函数,可以执行以下操作: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
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的声明。