- 输入特性
- 在主调函数分配内存,被调函数使用
- 在堆区创建
二级指针做函数参数的输入特性#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h>
主调函数分配内存,被调函数使用void printArray(int ** pArray, int len) { for (int i = 0; i < len; i++) { printf("%d\n", *pArray[i]); } }
void test01() { //在堆区分配内存 int ** p = malloc(sizeof(int*) * 5); //在栈上创建数据 int a1 = 10; int a2 = 20; int a3 = 30; int a4 = 40; int a5 = 50; p[0] = &a1; p[1] = &a2; p[2] = &a3; p[3] = &a4; p[4] = &a5; printArray(p, 5); if (p != NULL) { free(p); p = NULL; } }
- 在栈上创建
void test02() { //在栈上创建 int * pArray[5]; for (int i = 0; i < 5; i++) { pArray[i] = malloc(4); *pArray[i] = 100 + i; } //int len = sizeof(pArray) / sizeof(int*); int len = sizeof(pArray) / sizeof(pArray[0]); printArray(pArray, len); for (int i = 0; i < 5; i++) { if (pArray[i] != NULL) { free(pArray[i]); pArray[i] = NULL; } } }
- 输出特性
- 在被调函数中分配内存,主调函数使用
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<stdlib.h>
void allocateSpace(int **p) { int * arr = malloc(sizeof(int) * 10); for (int i = 0; i < 10; i++) { arr[i] = i + 10; } *p = arr; }
void printArray(int ** pArray, int len) { for (int i = 0; i < len; i++) { printf("%d\n", (*pArray)[i]); } }
void freeSpace(int ** p) { if (*p != NULL) { free(*p); *p = NULL; } }
void test01() { int * p = NULL; allocateSpace(&p); printArray(&p, 10); freeSpace(&p); if (p == NULL) { printf("空指针\n"); } else { printf("野指针\n"); } }
int main() { test01(); system("pause"); return EXIT_SUCCESS; }
- 在被调函数中分配内存,主调函数使用
二级指针做函数参数的输入输出特性
于 2022-05-17 21:54:46 首次发布