一.指针数组
指针数组:顾名思义是数组内元素为指针的数组,我们在前面说过指针就是地址(详情请看前文:指针第一弹http://t.csdnimg.cn/ta80D),那么我们可以发现:指针数组内存储的元素就是地址。
一般情况下,我们通常在需要处理多个字符串时使用指针数组,常用的就是指针数组与字符数组结合使用,指针数组中存储的指针指向字符数组的首地址。
#include <stdio.h>
int main() {
char str1[] = "Hello";
char str2[] = "World";
char *str[2]; // 声明一个指针数组,用于存储指向字符数组的指针
str[0] = str1; // 将指针指向str1的首地址
str[1] = str2; // 将指针指向str2的首地址
for (int i = 0; i < 2; i++) {
printf("%s ", str[i]); // 使用指针数组中的指针,通过解引用操作,输出对应的字符数组内容
}
return 0;
}
“*”表示此数组是指针类型的,每个数组元素可以看做一个指针变量都可指向一个整型变量。
注意不要写成int(*str)[2];这是指向一维数组的指针变量
定义一维指针数组的一般形式为类型名*数组名[数组长度];
**需要注意的是,指针数组中存放的是字符数组的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符数组是分开的。
二.数组指针
数组指针是指向数组的指针。它可以指向数组的第一个元素的内存地址,从而可以通过指针来操作数组的元素。在C语言中,数组名本身就是一个数组指针。
通过数组指针,可以使用指针算术运算来遍历数组的元素。
例如,可以使用递增数组指针的方式来遍历数组中的所有元素,或者通过对指针进行解引用来访问数组元素的值。
#include <stdio.h>
int main() {
int arr[] = {1, 2, 3, 4, 5};
int size = sizeof(arr) / sizeof(arr[0]);
int *p = arr; // 指向数组的第一个元素的指针
for (int i = 0; i < size; i++) {
printf("%d ", *p); // 输出当前指针指向的元素
p++; // 将指针递增,指向下一个元素
}
return 0;
}
数组指针还可以传递给函数,从而可以实现在函数中操作数组。函数参数可以声明为数组指针,这样函数就可以接受任意大小的数组作为参数。在函数中,可以使用指针算术运算和解引用操作来访问和修改数组的元素。
需要注意的是,数组指针和指向数组元素的指针是不同的。数组指针指向整个数组,而指向数组元素的指针只指向一个数组元素。
三.函数指针
函数指针是指向函数的指针变量。它可以用于存储函数的地址,并且可以调用该函数。函数指针的类型必须与函数的类型相匹配。
函数指针的声明方式为:函数返回类型(*指针变量名)(参数列表)。
例如
int (*p)(int, int)
表示一个指针变量p,它可以指向返回值为int类型,接受两个int类型参数的函数。
四.指针函数
指针函数是一个返回指针的函数。它的返回值类型是指针类型。指针函数可以用于返回指向任何类型的指针,包括数组、结构体和函数指针等。
指针函数的声明方式为:返回指针类型 函数名(参数列表)。
例如
int* myFunction(int a, int b)
表示一个指针函数myFunction,它接受两个int类型参数,并返回一个指向int类型的指针。
函数指针和指针函数在某些情况下可以互相转换使用。可以将函数指针赋值给指针函数,也可以将指针函数的返回值赋给函数指针。
使用函数指针和指针函数可以实现函数的动态调用和灵活的函数返回值类型。它们在C语言编程中经常用于实现回调函数等功能。
今天的分享到此结束,期待下次再见!