sizeof计算二维数组长度的问题

博客给出一段代码,定义了二维数组指针,通过指针操作对二维数组进行sizeof运算,并使用printf函数输出结果,涉及二维数组和sizeof的运用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:

#include <stdio.h>

int main()

{

double d0,d1,d2,d3,d4,d5;

double* array[2][3] = { &d0,&d1,&d2,&d3,&d4,&d5 };

double* ( * p )[2][3];

p = &array;

 

printf( "%d\n", sizeof( p ) );

printf( "%d\n", sizeof( *p ) );

printf( "%d\n", sizeof( **p ) );

printf( "%d\n", sizeof( ***p ) );

printf( "%d\n", sizeof( ****p ) );

return 0;

}









在C语言中,直接获取二维数组长度并不是一件非常直观的事情。下面我会详细解释如何确定二维数组的行数和列数。 ### 获取二维数组大小的方法 假设我们有一个定义好的静态二维数组 `int arr[3][4];` #### 行数(Rows) 如果这个二维数组是在函数内部作为局部变量声明,并且你知道它是一个固定大小的数组,则可以利用sizeof运算符计算其行数: ```c #include <stdio.h> void printArraySize(int arr[][4], int rows) { printf("Row count (passed as parameter): %d\n", rows); } int main() { // 定义一个三维数组 int arr[3][4] = {{1,2,3,4},{5,6,7,8},{9,0,1,2}}; // 计算行列数并打印出来 size_t row_count = sizeof(arr)/sizeof(arr[0]); size_t column_count = sizeof(arr[0])/sizeof(arr[0][0]); printf("Row count: %zu\n", row_count); // 输出应该是 '3' printf("Column count: %zu\n", column_count); // 输出应该是 '4' return 0; } ``` 但是当你将二维数组传递给另一个函数时,由于指针退化的原因,编译器无法再通过 `sizeof()` 直接获得整个数组的信息了。因此,在这种情况下,你需要显式地把每一维的尺寸当作额外参数传入目标函数里去,就像上面例子中的第二个形参那样。 对于动态分配内存创建的二维数组(例如用双重指针),则通常需要保存下它的维度信息供后续操作使用;或者也可以构建结构体封装数据及其元信息一起处理。 需要注意的是,如果你只知道指向该数组某一行元素的首地址而不知道具体的列宽,那么就不可能仅凭此单点信息准确推断出原生二维数组的实际规模了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值