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

  1. 输入特性
    1. 在主调函数分配内存,被调函数使用
    2. 在堆区创建
      #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;
      	}
      }
      

    3. 在栈上创建
      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;
      		}
      	}
      }
  2. 输出特性
    1. 在被调函数中分配内存,主调函数使用
      #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;
      }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值