c语言的指针数组详解
在C语言中,指针数组是一个非常重要的数据结构。它是由若干个指针组成的数组,每个指针存储了一个地址值,该地址指向一个具体的内存区域。通过指针数组,我们可以非常方便地管理多个指针,同时还可以用于实现动态内存分配和传递多个指针参数等情况。
定义指针数组
指针数组的定义格式为:
数据类型 *数组名称[数组长度];
其中,数据类型表示指针指向的数据类型,数组名称为指针数组的名称,数组长度是指针数组的元素个数。
例如:
int a = 1, b = 2, c = 3;
int *ptr[3] = {&a, &b ,&c};
上述代码定义了一个包含3个整型指针的数组ptr
,数组的元素分别是变量a
、变量b
和变量c
的地址。
访问指针数组
可以使用下标运算符[]
来访问指针数组的元素,例如:
int a = 1, b = 2, c = 3;
int *ptr[3] = {&a, &b ,&c};
printf("%d\n", *ptr[0]); // 输出1
printf("%d\n", *ptr[1]); // 输出2
printf("%d\n", *ptr[2]); // 输出3
指针数组作为函数参数
指针数组可以作为函数的参数,从而实现对多个指针参数的传递。
例如,下面的代码演示了如何将指针数组作为函数参数传递:
void print_array(int *arr[], int len) {
for (int i = 0; i < len; i++) {
printf("%d ", *arr[i]);
}
printf("\n");
}
int main() {
int a = 1, b = 2, c = 3;
int *ptr[3] = {&a, &b ,&c};
print_array(ptr, 3); // 输出 1 2 3
return 0;
}
上述代码中,print_array()
函数接受一个整形指针数组和数组长度作为参数,函数内部遍历指针数组,输出每个指针所指向的值。
动态内存分配指针数组
指针数组也可以用于动态内存的分配,从而实现灵活地管理内存空间。
例如,下面的代码演示了如何动态地分配一个指针数组:
int main() {
int **ptr;
int len = 3;
ptr = (int **)malloc(sizeof(int *) * len); // 分配3个指针的内存空间
for (int i = 0; i < len; i++) {
ptr[i] = (int *)malloc(sizeof(int)); // 分配每个指针所指向的内存空间
*ptr[i] = i + 1; // 初始化
}
for (int i = 0; i < len; i++) {
printf("%d ", *ptr[i]); // 输出 1 2 3
}
return 0;
}
上述代码中,首先通过malloc()
函数分配了3个指针的内存空间,然后再分别为每个指针分配所指向的内存空间,并将每个内存空间初始化为1、2、3等值。
示例1:使用指针数组实现字符串数组排序
下面的示例演示了如何使用指针数组实现字符串数组的排序:
#include <stdio.h>
#include <string.h>
void sort_strings(char *str[], int n) {
char *temp;
for(int i = 0; i < n - 1; ++i) {
for(int j = i + 1; j < n; ++j) {
if(strcmp(str[i], str[j]) > 0) {
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}
}
}
int main(){
char *arr[] = {"apple","orange","banana","mango","kiwi"};
int n = 5;
sort_strings(arr, n);
for(int i = 0; i < n; ++i){
printf("%s\n", arr[i]);
}
return 0;
}
上述代码中,定义了一个字符串指针数组arr
,它包含了5个字符串指针,然后调用sort_strings()
函数进行排序,再依次输出排好序的字符串数组。
示例2:使用指针数组实现多级指针
下面的示例演示了如何使用指针数组实现多级指针:
#include<stdio.h>
int main(){
int a = 10;
int *p = &a;
int **pt = &p;
int ***ptt = &pt;
int ****pttt = &ptt;
int *****ptttt = &pttt;
int ******pttttt = &ptttt;
int *******ptttttt = &pttttt;
int ********pttttttt = &ptttttt;
int *ptr[] = {p, *pt, **ptt, ***pttt, ****ptttt, *****pttttt, ******ptttttt, *******pttttttt};
for (int i = 0; i < 8; i++) {
printf("%d\n", *ptr[i]);
}
return 0;
}
上述代码中,定义了一个指针数组ptr
,它包含了多个指针,每个指针都是前一个指针的地址。输出指针数组ptr
中所有指针所指向的值,可以看到输出结果为10,即a
的值。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c语言的指针数组详解 - Python技术站