C语言 二维数组使用指针获取值的问题
在嵌入式图像处理的中,很多情况下,更适合用指针获取数组的值,而不是通过数组下标获取。
使用指针获取数组值仅需要一次for循环,而利用下标获取二维数组的值时不得不使用两次for循环。
获取二维数组的值与获取一维数组值的方法有所不同,若不注意可能导致程序出错,详见代码:
#include <stdio.h>
int main(){
//初始化一维数组
int a[6]={1,2,3,4,5,6};
//初始化二维数组
int b[3][2]={
{1,2},
{3,4},
{5,6}
};
//利用指针for循环打印一维数组
int i=0;
int j=0;
for(i=0;i<6;i++){
printf("%d,",*(a+i));
}
结果为:1,2,3,4,5,6,
//利用指针for循环打印二维数组
//错误打印方法:
for(i=0;i<6;i++){
printf("%d,",*(b+i*2));
printf("%d \r\n",*(b+i*2+1));
}
//结果为:
//6422032,6422040
//6422048,6422056
//6422064,6422072
//6422080,6422088
//6422096,6422104
//6422112,6422120
//错误打印方法2:
for(i=0;i<3;i++){
printf("%d,",**(b+i*2));
printf("%d \r\n",**(b+i*2+1));
}
//结果为:
//1,3
//5,4199705
//1,3
//正确打印方法:
for(i=0;i<3;i++){
printf("%d,",*(*(b))+i*2);
printf("%d \r\n",*(*(b)+i*2+1)) ;
}
//结果为:
//1,2
//3,4
//5,6
return 0;
}
通过代码可以发现,一维数组中的值直接指向存入的Value,而二维数组中的值指向一个地址,需要对地址再次解析才可以获取数组中的值。