二级指针做函数参数的输入特性

输入特性:

  • 在主调函数分配内存,被调函数使用
  • 在堆区创建
  • 在栈区创建

代码示例:

#define
#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*);
printArray(pArray,len);
for (int i = 0; i < 5; i++)
{
if (pArray != NULL)
{
free(pArray[i]!=NULL);
pArray[i] = NULL;
}
}
}
int main()
{
//test01();
test02();
return EXIT_SUCCESS;
}

输出特性

代码示例:

#define
#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 < 10; 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);
p = NULL;
if (p == NULL)
{
printf("空指针\n");
}
else
{
printf("野指针\n");
}
}
int main()
{
test01();
return EXIT_SUCCESS;
}

更多文章,敬请关注微信公众号:YQ编程