C-二级指针输出模型练习

C语言中二级指针输出模型主要目的在于使用被调函数中分配的内存

在主函数中定义一级指针,子函数输入参数定义为二级指针,则传递至子函数的参数为一级指针的地址。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct network_package{
	int num;
	char *local_addr;
	char *dest_addr;
	char **addr_array;
}network_package;

int network_package_allocate(network_package **p)
{
	int i;
	network_package *tmp;
	tmp = NULL;

	tmp = (network_package *)malloc(sizeof(network_package));
	if (tmp == NULL){
		return -1;
	}
	tmp->local_addr = (char *)malloc(32 * sizeof(char));
	if (tmp->local_addr == NULL){
		return -1;
	}
	tmp->dest_addr = (char *)malloc(32 * sizeof(char));
	if (tmp->dest_addr == NULL){
		return -1;
	}
	tmp->addr_array = (char **)malloc(4 * sizeof(char *));
	if (tmp->addr_array == NULL){
		return -1;
	}
	for (i = 0; i < 4; i++){
		tmp->addr_array[i] = (char *)malloc(32 * sizeof(char));
		if (tmp->addr_array[i] == NULL){
			return -1;
		}
	}
	*p = tmp;
	printf("tmp:%d\n", tmp);

	return 1;
}

int print_package(network_package *p)
{
	int i;
	printf("Local_addr: %s\n", p->local_addr);
	printf("Dest_addr: %s\n", p->dest_addr);
	for (i = 0; i < 4; i++){
		printf("Array[%d]_addr: %s\n", i, p->addr_array[i]);
	}
	return 1;
}

void main()
{
	network_package *pkg_tx;
	pkg_tx = NULL;

	if (network_package_allocate(&pkg_tx)){
		printf("pkg_tx: %d\n", pkg_tx);
		strcpy_s(pkg_tx->local_addr, 32, "192.168.5.10");
		strcpy_s(pkg_tx->dest_addr, 32, "192.168.5.20");
		strcpy_s(pkg_tx->addr_array[0], 32, "192.168.5.30");
		strcpy_s(pkg_tx->addr_array[1], 32, "192.168.5.31");
		strcpy_s(pkg_tx->addr_array[2], 32, "192.168.5.32");
		strcpy_s(pkg_tx->addr_array[3], 32, "192.168.5.33");
	}

	print_package(pkg_tx);

	system("pause");
}

执行结果:


查看子函数中tmp指针指向的内存首地址为7570944,主函数调用子函数后,pkg_tx指针指向的内存首地址也为7570944。

成功的将子函数分配的内存引入了主函数,并可进行赋值等一系列操作。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值