当我们学习 C 语言时,经常会遇到数组和指针这两个概念。它们虽然有些相似的地方,但是它们还是有很大的区别的。
数组和指针的定义
- 数组是相同类型数据的集合,它们在内存中是连续存储的,可以通过数组名加索引的方式访问每个元素。
- 指针是一个变量,存储的是一个地址。这个地址指向的是另外一个变量的值,可以通过指针来访问和修改这个变量的值。
数组和指针的区别
- 数组的长度是固定的,定义时必须声明数组长度;而指针指向的地址可以随时改变,可以指向任意类型的数据。
- 数组名表示整个数组,不能被赋值或改变;而指针变量可以被赋值为不同的地址。
- 数组名可以被用作指向数组第一个元素的指针;而指针变量需要通过取地址符 & 或者其他赋值方式来指向另一个变量。
数组和指针的例子说明
示例 1:数组作为函数参数
下面这个函数可以计算数组的平均值:
double array_average(double *arr, int size) {
double sum = 0;
for(int i = 0; i < size; i++) {
sum += *(arr+i);
}
return sum/size;
}
我们可以在 main 函数中调用这个函数来计算相应数组的平均值:
int main() {
int arr[5] = {1, 2, 3, 4, 5};
double average = array_average(arr, 5);
printf("The average of the array is %f", average);
return 0;
}
在调用 array_average 函数时,我们把数组名 arr 当作参数传给函数。这里数组名也就是指向数组第一个元素的指针,也可以使用取地址符 & 来获取数组的地址(array_average(&arr[0], 5)
)。
示例 2:指针操作数组元素
下面这个例子演示了指针对一个数组进行遍历并输出每个元素的值:
int main() {
int arr[5] = {1, 2, 3, 4, 5};
int *p = arr;
for(int i = 0; i < 5; i++) {
printf("%d ", *(p+i));
}
return 0;
}
在这个例子中,我们定义了一个指向 int 类型的指针变量 p,将数组 arr 的地址赋给了 p(int *p = arr;
)。
在循环中,我们使用指针访问数组元素并输出它们的值(printf("%d ", *(p+i));
)。*(星号)符号表示“取出 p 指向的地址上的值”,i 则是索引值。
不难看出,在这个例子中,我们可以使用数组名和指针变量对数组进行操作,但是它们有着不同的方式,而且这些区别也让每个用法都各有优缺点。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言数组和指针的差别 - Python技术站