参考以下代码,帮助理解C语言的数组和指针的区别。
#include <stdio.h>
#include <stdlib.h>
int main(
const int argc,
const char *argv[]
)
{
// 声明整形数组,有10个元素
int array[10];
// 声明指向整形的指针
int *p_int;
// 声明指向有10个整形元素的指针
int(*p_array)[10];
// 指向数组的第一个元素
p_int = array;
printf("p_int=%p array=%p &array[0]=%p p_int+1=%p\n", p_int, array, &array[0], p_int + 1);
// 以下这句是错误的代码,类型不匹配
//p_array = array;
// 注意这里的赋值,用了&
p_array = &array;
printf("p_array=%p array=%p &array[0]=%p p_array+1=%p\n", p_array, array, &array[0], p_array + 1);
getchar();
return 0;
}
输出结果:
p_int=0019FAF4 array=0019FAF4 &array[0]=0019FAF4 p_int+1=0019FAF8 注意p_int+1增加了int大小的字节数。
p_array=0019FAF4 array=0019FAF4 &array[0]=0019FAF4 p_array+1=0019FB1C 注意p_array+1增加了整个数组的大小的字节数。