目录
1、数组、指针、函数
在前面我们已经学习了数组、指针以及函数,看起来都没有难的地方,我自认为呢也掌握的比较好,直到我发现,这些东西可以打组合拳
2、数组指针及指针数组
2.1、数组指针
顾名思义,数组指针就是指向一个数组的指针,数组指针是一个指针,它指向一个数组。数组指针的声明方式是:type *arrayName;
,其中type
是数组的数据类型,arrayName
是数组指针的名称。
例如:int *arrPtr;
声明了一个名为arrPtr
的整数数组指针。
数组指针可以用来访问数组中的每个元素。例如:arrPtr[i]
访问数组指针arrPtr
中的第i
个元素。
2.2、指针数组
指针数组是一个数组,其中每个元素都是一个指针。指针数组的声明方式是:type *arrayName[];
,其中type
是指针所指向的数据类型,arrayName
是指针数组的名称。
例如:int *ptrArray[5];
声明了一个名为ptrArray
的指针数组,其中每个元素都是一个整数指针。
指针数组的元素可以是同一个类型的指针,也可以是不同的类型的指针。例如:int *ptrArray1[5];
和char *ptrArray2[5];
都是指针数组,但它们的元素类型不同。
2.3、区别
需要注意的是,数组指针和指针数组之间的区别在于,数组指针是指向一个数组,而指针数组是一个数组,其中每个元素都是一个指针。
int arr[5] = {1, 2, 3, 4, 5};
int *arrPtr = arr; // 数组指针
int *ptrArray[5]; // 指针数组
for (int i = 0; i < 5; i++) {
ptrArray[i] = &arr[i]; // 指针数组的元素是数组中的每个元素的地址
}
在上面的代码中,arrPtr
是一个数组指针,它指向数组arr
。ptrArray
是一个指针数组,其中每个元素都是数组arr
中的每个元素的地址。
3、指针函数与函数指针
3.1、指针函数
- 定义: 其返回值类型是指针类型,例如
int *func(int a, int b);
声明了一个名为func
的指针函数,它接收两个整型参数,并返回一个指向整型的指针。 - 作用: 通常用于返回动态分配的内存地址,或者返回指向某个数据结构的指针。
- 示例:
-
int *findMax(int arr[], int size) { int *maxPtr = arr; // 指向数组第一个元素 for (int i = 1; i < size; i++) { if (arr[i] > *maxPtr) { maxPtr = &arr[i]; // 指向最大值元素 } } return maxPtr; }
3.2、函数指针
- 定义: 它是一个指向函数的指针,可以用来调用函数。 例如
int (*funcPtr)(int, int);
声明了一个名为funcPtr
的函数指针,它指向一个接收两个整型参数并返回整型的函数。 - 作用: 可以实现回调函数、函数表等功能,提高代码的灵活性和可扩展性。
- 示例:
-
int add(int a, int b) { return a + b; } int subtract(int a, int b) { return a - b; } int main() { int (*operation)(int, int); // 函数指针 operation = add; int sum = operation(5, 3); // 调用add函数 operation = subtract; int diff = operation(5, 3); // 调用subtract函数 return 0; }
3.3、区别
总而言之,指针函数是返回指针的函数,函数指针是指向函数的指针。 记住它们的关键在于理解函数声明中星号 *
的位置:在函数名之前表示函数指针,在函数名之后表示指针函数。
4、所有组合
总而言之,组合呢我们只需要认清具体的类型,知道数据的属性,就可以知道是怎么使用的了
指针和数组的组合方式:
- 数组指针:数组名(如int arr[5])可以转换为指针,指向数组的第一个元素。
- 指针数组:可以定义一个数组,其中每个元素是指针类型。
- 指针数组指针:可以定义一个指针数组,其中每个指针指向一个数组。
指针和函数的组合方式:
- 函数指针:可以定义一个指针,指向函数。
- 函数返回指针:函数可以返回指针类型的值。
- 指针作为函数参数:可以将指针类型的变量作为函数参数。
指针、函数和数组的组合方式:
- 函数返回指针数组:函数可以返回一个指针数组。
- 函数指针数组:可以定义一个指针数组,其中每个指针指向一个函数。
- 指针函数返回数组:函数可以返回一个数组,并将其作为指针返回。