1
int
array[
100
];
2
3 memset(array, 0 , sizeof(array));
4 memset( & array, 0 , sizeof(array));
2
3 memset(array, 0 , sizeof(array));
4 memset( & array, 0 , sizeof(array));
第3行和第4行有什么不同吗?其实从效果上来说是一样的,但是这里要注意 array 和 &array 的类型是不同的。array 相当于 &array[0],而 &array 是一个指向 int[100] 的指针,类型是 int(*)[100]。
以下代码可以看出这个不同:
1
#include
<
stdio.h
>
2
3 int main()
4 {
5 int array[ 100 ] = { 0 , 1 , 2 };
6 typedef int ( * ARRAY)[ 100 ];
7 int * p1 = array;
8 ARRAY p2 = & array;
9 // int* p3 = &array; // 这样编译错误
10
11 printf( " p1 = 0x%08X\n " , p1);
12 printf( " p2 = 0x%08X\n " , p2);
13 printf( " p1[2] = %d\n " , p1[ 2 ]);
14 printf( " p2[2] = %d\n " , p2[ 2 ]);
15 printf( " (*p2)[2] = %d\n " , ( * p2)[ 2 ]);
16
17 getchar();
18 return 0 ;
19 }
2
3 int main()
4 {
5 int array[ 100 ] = { 0 , 1 , 2 };
6 typedef int ( * ARRAY)[ 100 ];
7 int * p1 = array;
8 ARRAY p2 = & array;
9 // int* p3 = &array; // 这样编译错误
10
11 printf( " p1 = 0x%08X\n " , p1);
12 printf( " p2 = 0x%08X\n " , p2);
13 printf( " p1[2] = %d\n " , p1[ 2 ]);
14 printf( " p2[2] = %d\n " , p2[ 2 ]);
15 printf( " (*p2)[2] = %d\n " , ( * p2)[ 2 ]);
16
17 getchar();
18 return 0 ;
19 }
运行结果可能是:
p1
=
0x0022FDF8
p2 = 0x0022FDF8
p1 [ 2 ] = 2
p2 [ 2 ] = 2294040
(*p2) [ 2 ] = 2
p2 = 0x0022FDF8
p1 [ 2 ] = 2
p2 [ 2 ] = 2294040
(*p2) [ 2 ] = 2