C语言中如何设置指针指向二维数组的指定行
实现指向二维数组第一行的指针方法
给定二维数组定义如下:
double a[2][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}};
要定义指向第一行的指针,首先要明确类型匹配规则:C语言中二维数组的每一行都是一个固定长度的一维数组,本例中每行是包含4个double元素的一维数组,因此指向行的指针必须是指向长度为4的double数组的数组指针,不能用指向单个double的普通指针替代。
具体写法
- 显式取第一行地址赋值(语义最直观,推荐新手使用)
// 声明指向「包含4个double元素的数组」的指针p,指向第一行a[0]的地址 double (*p)[4] = &a[0];
- 利用数组名退化规则简写
// 二维数组名a作为右值时,会自动退化为指向第一个元素(即第一行)的指针,和上面写法完全等价 double (*p)[4] = a;
常见错误说明
不要使用
double *p = a[0];这类写法:这个写法里的p是指向单个double类型的指针,仅指向第一行的第一个元素a[0][0],而非整行。二者步进长度完全不同:普通double指针每次偏移移动1个double的长度(通常8字节),而数组指针每次偏移移动一整行的长度(4个double,共32字节),如果混用会导致指针运算逻辑错误。
内容的提问来源于stack exchange,提问作者Sean Mabli
相关产品推荐
相关产品推荐

