日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言函数返回数组

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言函数返回数组 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

能夠直接在自定義函數中,寫成指針類型返回值,直接返回呢?

#include <stdio.h> int* 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函數里再輸出肯定已經不是原來的內容了。

方法一:

#include <stdio.h> int* 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("%d\n", b[i]);free(b);//printf("%s\n", b);return 0; }

采用指針傳遞的方式。str雖然也是一個局部變量,但它是一個指針,只有四個字節,當它指向字符串時,字符串存在常量區,? 而不屬于fun函數里的部分,全程序可讀,所以return后依舊存在;當指向非字符串時,采用malloc為str指向的空間分配內存,數據保存在堆區,注意在程序結束是要釋放(free)掉內存。跟據自己需要在函數中加入形參。

方法二:

#include <stdio.h> int* 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("%d\n", b[i]);return 0; }

采用static關鍵字。

方法三:

#include <stdio.h> %%%求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<n; i++)printf("%-3d", b[i]);return 0; }

使用參數,將結果直接保存在傳入參數中。

返回二位數組時的方法也是一樣。

采用static的方式:

#include <stdio.h> int **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("%d\n", *((int *)b+3*i+j));}}return 0; }

采用malloc的方式:?

#include<stdio.h> #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<M;i++)for(j=0;j<N;j++)printf("%d\t",*((int *)b+N*i+j));} int **addOne(int a[M][N]){int **b =(int **)malloc(M*sizeof(int *));//先申請M個指針型字節的空間for (int i=0;i<M;i++)b[i]=(int *)malloc(N*sizeof(int));//然后依次按一維申請int i,j;for(i=0;i<M;i++)for(j=0;j<N;j++)*((int *)b+N*i+j) = *((int *)a+N*i+j) + 1;//找地址,如同數據結構中矩陣找地址相同,首地址+(次數行數-1)*總列數+次數列數-1//i,j都是從0開始,可以不用減1return b; }

總結

以上是生活随笔為你收集整理的C语言函数返回数组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。