函数返回一个指针:
#include <stdio.h> /** 照理说,这样是不可以的,是有问题的,因为在a传递进来的时候,a是有值的。 但是返回的时候a已经销毁了。这个地址也不复存在了,这个到后面讲到内存的时候会具体详解。 值的注意的是 这个 function1 返回的是一个 int* 是一个 返回int型指针的一个指针变量。 返回的是一个指向int型数据类型的指针 */ int *function1(int a){ return &a; } /** 不存在错误的回调,这个 可能有另外的分配方式,可以成功的返回这样一个指向字符数组类型的指针,指向“one” “two”“three”“anything” 当然也可以写一个有错误的回调: 值的注意的是 返回的是一个 字符数组类型的指针 */ char *function2(int a){ if (a == 1) return "one"; else if (a == 2) return "two"; else if (a == 3) return"three"; else return "anything"; } /** 这个就是有bug的回调,因为 在要返回的时候 这个 开辟的空间已经消失了,不再存在这个 buf了,所以 这个 是有问题的,但是不影响返回 值的注意的是 返回的是一个字符数组类型的指针 */ char *function3(int a){ char buf[10]; if (a == 1) strcpy(buf, "one"); else strcpy(buf, "anything"); return buf; } int main(){ int *b = function1(3); printf("%d", *b); getchar(); }
原文:http://www.cnblogs.com/letben/p/5225483.html