C 多维数组和指向具有一个Typedef的数组的指针
这段代码有效,允许我通过指针数组访问2D数组:C 多维数组和指向具有一个Typedef的数组的指针,c,arrays,pointers,typedef,C,Arrays,Pointers,Typedef,这段代码有效,允许我通过指针数组访问2D数组: typedef uint8_t IMAGE_TYPE[4][8]; typedef uint8_t (*IMAGE_PTR_TYPE)[8]; IMAGE_TYPE test1 = {{0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}, {0,1,2,3,4,5,6,7}
typedef uint8_t IMAGE_TYPE[4][8];
typedef uint8_t (*IMAGE_PTR_TYPE)[8];
IMAGE_TYPE test1 = {{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7}};
IMAGE_TYPE test2 = {{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17}};
IMAGE_PTR_TYPE test_ptr_array[] = {test1, test2};
然而,我有两个typedef,这让我很恼火。似乎我只需要一个,而且这个代码应该可以工作:
IMAGE_TYPE *test_ptr_array[] = {test1, test2};
但是,它没有给我这个错误:
错误:无法将'uint8_t()[8]{aka unsigned char()[8]}'转换为
初始化中的'uint8_t()[4][8]{aka unsigned char()[4][8]}
C是否有一种方法可以只使用一个typedef处理此问题?这里有一种方法:
typedef uint8_t ROW_TYPE[8];
ROW_TYPE test1[] = {{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7}};
ROW_TYPE test2[] = {{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17}};
ROW_TYPE *test_ptr_array[] = {test1, test2};
使用此方法,您可以访问诸如test\u ptr\u array[0][1][2]
之类的数字,这将提供test1[1][2]
以下是一种方法:
typedef uint8_t ROW_TYPE[8];
ROW_TYPE test1[] = {{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7},
{0,1,2,3,4,5,6,7}};
ROW_TYPE test2[] = {{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17},
{10,11,12,13,14,15,16,17}};
ROW_TYPE *test_ptr_array[] = {test1, test2};
使用此方法,您可以访问像
test\u ptr\u array[0][1][2]
这样的数字,这将提供test1[1][2]
如果您愿意忍受额外的*
,您可以使用图像类型*ptr
来声明指针。但是,在将图像类型
分配给ptr
时,您需要使用&
,并且要取消引用,您需要额外的*
,如(*ptr)[i][j]
。请注意,如果这样做更好,但它确实解决了具体的投诉。不要使用typedef
指针。它会混淆代码,最终导致混乱。在函数和其他地方使用数组语法有什么问题?它在大多数情况下都会衰减为指针。IMAGE_TYPE*test_ptr_array[]={&test1,&test2;}
应该可以工作。@immibis-确实可以!谢谢当我需要他们的地址时,我习惯于不使用数组,但我没有尝试过。immibis和Tom的建议要求在通过test\u ptr\u array
使用数组时需要额外的尊重。如果你愿意忍受额外的*
,你可以使用IMAGE\u TYPE*ptr
来声明指针。但是,在将图像类型
分配给ptr
时,您需要使用&
,并且要取消引用,您需要额外的*
,如(*ptr)[i][j]
。请注意,如果这样做更好,但它确实解决了具体的投诉。不要使用typedef
指针。它会混淆代码,最终导致混乱。在函数和其他地方使用数组语法有什么问题?它在大多数情况下都会衰减为指针。IMAGE_TYPE*test_ptr_array[]={&test1,&test2;}
应该可以工作。@immibis-确实可以!谢谢当我需要数组的地址时,我习惯于不使用数组&我没有尝试过。但是,immibis和Tom的建议要求在通过test\u ptr\u array
使用数组时需要额外的尊重。