指向多维数组的指针变量(int *p 和 int ( *p )[ N ])
int a[ 4 ];
a有四个元素,每个元素为整型
int ( *p )[ 4 ]; //4为二维是在的后面的一个数
*p有4个元素,每个元素为整型,也就是说p所指的的对象有4个整型元素的数组即p是一维数组的指针
( p只是指向一个包含有4个元素的一维数组,p的值就是该一维数组的起始地址 )
程序数组为int a[3][4] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 };
经常搞混淆int *p和int ( *p )[ 4 ]可参考以下程序
# include <stdio.h> int main ( void ) { int a[3][4] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 }; int *p; for ( p = a[ 0 ]; p < a[ 0 ] + 12; p ++ ) { if ( (p - a[ 0 ] ) % 4 == 0 ) //每输出四个元素换行,注意( p - a[ 0 ] )的括号别忘了添加,否则会报错 printf ( "\n" ); printf ( "%4d", *p ); } printf ( "\n" ); }
结果:

# include <stdio.h> int main ( void ) { int a[][4] = { 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23 }; int ( *p )[ 4 ], i, j; //int ( *p )[ 4 ]表示p是一个指针变量,它指向4个整形元素的一维数组 p = a; //二维数组的首地址赋给p scanf ( "i = %d, j = %d", &i, &j ); printf ( "a[ %d, %d ] = %d\n", i, j, *( *( p + i ) + j ) ); }
结果:

浙公网安备 33010602011771号