能够直接在自定义函数中,写成指针类型返回值,直接返回呢?
#includeint* func() { int str[5]={1,2,3,4,5}; return str; } int main() { int *b; b = func(); for(int i=0; i<5; i++) printf("%d", b[i]); return 0; }
直接返回str数组名(注意不需要加&)。但事实上,运行结果并不正确,因为str本身是一个自定义函数中的局部变量,是一个数组有5个字节,它的生命周期当然也随着它所在的函数在一起,随着fun函数调用的结束,其中的各种局部变量也将被系统收回,所以str数组这5个字节也将被回收,自然在main函数里再输出肯定已经不是原来的内容了。
方法一:
#includeint* func() { //char *str = "hello world!"; int *str ; str = (int *)malloc(5*sizeof(int)); for(int i=0; i<5; i++){ *(str+i) = i; } return a; } int main() { int *b; //char *b; b = func(); for(int i=0; i<5; i++) printf("%dn", b[i]); free(b); //printf("%sn", b); return 0; }
采用指针传递的方式。str虽然也是一个局部变量,但它是一个指针,只有四个字节,当它指向字符串时,字符串存在常量区, 而不属于fun函数里的部分,全程序可读,所以return后依旧存在;当指向非字符串时,采用malloc为str指向的空间分配内存,数据保存在堆区,注意在程序结束是要释放(free)掉内存。跟据自己需要在函数中加入形参。
方法二:
#includeint* func() { static int str[5] = {1,2,3,4,5} ; return str; } int main() { int *b; b = func(); for(int i=0; i<5; i++) printf("%dn", b[i]); return 0; }
采用static关键字。
方法三:
#include%%%求100以内的素数%%% int func(int n, int a[]) { int flag; int num=0; for(int i=2;i<=n;i++){ flag = 1; for(int j=2; j<(int)i/2; j++){ if(i%j==0){ flag = 0; break; } } if(flag){ a[num] = i; ++num; } } return num; } int main() { int b[100]; int n; n = func(100,b); for(int i=0; i 使用参数,将结果直接保存在传入参数中。
返回二位数组时的方法也是一样。
采用static的方式:
#includeint **func() { static int str[3][3] = {{1,2,3},{4,5,6},{7,8,9}} ; return str; } int main() { int **b; b = func(); for(int i=0; i<3; i++){ for(int j=0; j<3; j++){ printf("%dn", *((int *)b+3*i+j)); } } return 0; } 采用malloc的方式:
#include#define M 3 #define N 2 int main(){ int **addOne(int a[M][N]); int a[M][N]={{1,1},{2,2},{3,3}}; int i,j; printf("n调用函数之后:n"); int **b = addOne((int **)a); for(i=0;i 欢迎分享,转载请注明来源:内存溢出
评论列表(0条)