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

指针做函数参数时,具备输入和输出特性:

        输入特性:主调函数分配内存,被调函数使用

        输出特性:被调函数分配内存,主调函数使用

1.输入特性

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

void fun(char* p) {

	strcpy(p, "hello world");
}

void test01() {

	//输入特性 主函数分配内存
	char buf[1024] = { 0 };
	fun(buf);
	printf("buf=%s\n", buf);
}

int main() { 

	test01(); // 输出hello world

	system("pause"); 
	return EXIT_SUCCESS; 
}

在输入特性测试中,test01()函数为主调函数,在主调函数中分配内存,被调函数fun()传入指针作为参数,在被调函数中使用。

2.输出特性

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

void fun(char** p) {
	char* tmp = (char*)malloc(1024); //输出特性
	if (tmp == NULL) {
		return;
	}
	strcpy(tmp, "helloworld");
	*p = tmp;
}

void test02() {
	char* p = NULL;
	fun(&p); // 传入指针地址
	if (p != NULL) {
		printf("%s\n", p);
		free(p);
		p = NULL;
	}
}

int main() { 

	//test01(); // 输出hello world
	test02(); // 输出helloworld

	system("pause"); 
	return EXIT_SUCCESS; 
}

在输出特性测试案例中,主调函数test02(),被调函数fun(),我们在被调函数中申请分配内存,在使用被调函数并传入指针作为参数时,我们应该传入指针的地址作为参数,并且被调函数的形参为二级指针。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值