返回值是指针的情况

第一种:传出指向静态内存或者已经分配动态内存的指针

#cat  get_a_day.c
#include <stdio.h>
#include <string.h>

const char *msg[] = {
	"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"
};

char *get_a_day(int idx){
	static char buf[20];
	strcpy(buf,msg[idx]);
	return buf;
}

int main(void){
	printf("%s %s\n",get_a_day(1),get_a_day(0));
	return 0;
}

第二种: 在函数中分配动态内存并且传出指向这块内存的指针

#cat malloc_p.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{
	int number;
	char *msg;
} unit_t;

unit_t *alloc_unit(void){
	unit_t *p = malloc(sizeof(unit_t));
	if(p == NULL){
		printf("out of memory");
		exit(1);
	}

	p->number=1;
	p->msg=malloc(20);
	strcpy(p->msg,"hello muahao");
	return p;
}

void free_unit(unit_t *p){
	free(p->msg);
	free(p);
}

int main(void){
	unit_t *p = alloc_unit();
	printf("number:%d\nmsg:%s\n",p->number,p->msg);
	free_unit(p);
	p=NULL;
	return 0;
}

posted @ 2017-07-23 15:38  苏小北1024  阅读(210)  评论(0编辑  收藏  举报