数组与指针
参考网络文档《C语言要点总结》
1> 数组与数组指针:
int matrix[3][10];
int *mp = matrix; //非法的,因为matrix并不是一个指向整型的指针,而是一个指向整型数组的指针
int (*p)[10]; //声明指向数组的整型指针;
p = matrix;
val = (*p)[3]; //与matrix[0][3]的值同
2> array_name和&array_name的异同: 前者为指向数组中的一个元素的指针;后者为指向整个数组的指针;两者指向的地址相同。
int month[4];
int (*pm)[4]; //声明指向一个数组的指针
pw = &month; //pw的值和week值相同
int calendar[12][31]; //数组元素类型为:拥有31个整型元素的数组
3> 数组名的值是一个指针常量,sizeof()数组名时,其返回整个数组的长度,而不是指针的长度。
int calendar[12][31];
int (*monthp)[31] = calendar;
size = sizeof(calendar[4]); //size = 31*4=124;
size = sizeof(monthp); //size = 4;
4> 数组的外部声明:extern int month[], 不能声明:extern int *month;
5> 常用的C变量的定义方式:
a) 一个整型数(An integer)
b) 一个指向整型数的指针(A pointer to an integer)
c) 一个指向指针的的指针,它指向的指针是指向一个整型数(A pointer to a pointer to an integer)
d) 一个有10个整型数的数组(An array of 10 integers)
e) 一个有10个指针的数组,该指针是指向一个整型数的(An array of 10 pointers to integers)
f) 一个指向有10个整型数数组的指针(A pointer to an array of 10 integers)
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an
答案是:
a) int a; // An integer
b) int *a; // A pointer to an integer
c) int **a; // A pointer to a pointer to an integer
d) int a[10]; // An array of 10 integers
e) int *a[10]; // An array of 10 pointers to integers
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer
6> 测试程序
void laji()
{
int num[] = {0,1,2,3,4,5,6,7,8,9};
printf("sizeof(num)=%d\n", sizeof(num));
char str[] = "0123456789";
printf("sizeof(str)=%d\n", sizeof(str));
char str1[] = {'0','1','2','3','4','5','6','7','8','9'};
printf("sizeof(str1)=%d\n", sizeof(str1));
int (*ptoint)[10] = #
printf("sizeof(ptoint)=%d, (*ptoint)[9]=%d\n", sizeof(ptoint),(*ptoint)[9]);
char (*ptostr)[11] = &str;
printf("sizeof(ptochar)=%d, (*ptochar)[9]=%c\n", sizeof(ptostr),(*ptostr)[9]);
int *p = num +5;
printf("p[-1]=%d, p[0]=%d, p[1]=%d\n",p[-1], p[0], p[1]);
printf("num[5]=%d,5[num]=%d\n",num[5],5[num]);
return;
}
运行结果:
sizeof(num)=40
sizeof(str)=11
sizeof(str1)=10
sizeof(ptoint)=4, (*ptoint)[9]=9
sizeof(ptochar)=4, (*ptochar)[9]=9
p[-1]=4, p[0]=5, p[1]=6
num[5]=5,5[num]=5