您的位置:首页 > 其它

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

2016-03-23 15:08 197 查看
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。

成功的将子函数分配的内存引入了主函数,并可进行赋值等一系列操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: