📅  最后修改于: 2023-12-03 14:54:38.961000             🧑  作者: Mango
在C语言中,指针和数组是两个非常重要的概念。指向数组的指针和指针数组是两个容易混淆的概念,下面将详细介绍它们之间的区别。
指向数组的指针是一个指向数组首元素的指针变量。例如,下面的代码定义了一个指向整型数组的指针变量p,并将其指向数组a的第一个元素。
int a[5] = {1, 2, 3, 4, 5};
int *p = &a[0]; // p指向数组a的第一个元素
可以用指针访问数组的元素,例如:
printf("%d", *(p+1)); // 输出2
指向数组的指针可以用于遍历数组,例如:
for(int i=0; i<5; i++){
printf("%d", *(p+i));
}
指针数组是一个数组,它的每个元素都是一个指针变量。例如,下面的代码定义了一个指针数组ptr,它有三个元素,分别是指向整型变量a、b、c的指针。
int a = 1, b = 2, c = 3;
int *ptr[3] = {&a, &b, &c};
可以用指针数组访问每个指针变量指向的值,例如:
printf("%d", *ptr[1]); // 输出2
指针数组也可以用于遍历数组,例如:
for(int i=0; i<3; i++){
printf("%d", *ptr[i]);
}
指向数组的指针和指针数组的区别在于:
例如,下面的代码演示了如何通过指针数组修改指针变量的指向:
int x = 1, y = 2, z = 3;
int *ptr[3] = {&x, &y, &z};
int a = 4, b = 5, c = 6;
for(int i=0; i<3; i++){
ptr[i] = (i==0)? &a : (i==1)? &b : &c;
}
printf("%d", *ptr[0]); // 输出4
指向数组的指针和指针数组都有它们自己的用处,要根据具体的情况选择使用。指向数组的指针适用于遍历数组或多维数组;指针数组适用于存储一组指针或动态管理内存。了解它们之间的区别,有助于写出更加简洁、优雅的代码。