首页
/
每日頭條
/
科技
/
c語言指針接收數組的值
c語言指針接收數組的值
更新时间:2024-10-05 06:22:51

c語言指針接收數組的值?數組和函數不能用做參數和返回值,但數組指針和函數指針可以,我來為大家科普一下關于c語言指針接收數組的值?下面希望有你要的答案,我們一起來看看吧!

c語言指針接收數組的值(C數組指針函數指針做函數參數和返回值)1

c語言指針接收數組的值

數組和函數不能用做參數和返回值,但數組指針和函數指針可以。

1 數組指針做函數參數

數組指針做函數參數,數組名用做實參時,其形參為指向數組首元素的指針(指針目标類型為數組元素)。

#include <stdio.h> #include <stdlib.h> #define ROWS 3 #define COLS 2 void fun1(int (*)[COLS], int); int main() { int array_2D[ROWS][COLS] = { {1, 2}, {3, 4}, {5, 6} }; int rows = ROWS; /* works here because array_2d is still in scope and still an array */ printf("MAIN: %zu\n",sizeof(array_2D)/sizeof(array_2D[0])); fun1(array_2D, rows); getchar(); return EXIT_SUCCESS; } void fun1(int (*a)[COLS], int rows) { int i, j; int n, m; n = rows; /* Works, because that information is passed (as "COLS"). It is also redundant because that value is known at compile time (in "COLS"). */ m = (int) (sizeof(a[0])/sizeof(a[0][0])); /* Does not work here because the "decay" in "pointer decay" is meant literally--information is lost. */ printf("FUN1: %zu\n",sizeof(a)/sizeof(a[0])); for (i = 0; i < n; i ) { for (j = 0; j < m; j ) { printf("array[%d][%d]=%d\n", i, j, a[i][j]); } } }

2 數組指針做函數返回值

數組指針做函數返回值時,數組指針是指指針目标類型為數組元素的指針。

#include <stdio.h> #include <malloc.h> char(*weekday())[5] { char(*wee)[5] = (char(*)[5])malloc(sizeof(char)*5*7); char* str[] = {"Mon.","Tue","Wed.","Thu.","Fri.","Sat.","Sun."}; for(int i=0;i<7;i ) for(int j=0;j<5;j ) wee[i][j] = str[i][j]; return wee; } int main() { char(*week)[5] = weekday(); for(int i=0;i<7;i ) printf("%s\n",week[i]); free(week); setbuf(stdin,NULL); getchar(); }

3 函數指針做函數參數

函數指針做函數參數,可以封裝函數體中因因應不同需求而需“變化”的代碼,避免“硬”編程,讓代碼更加通用和泛化。

#include <stdio.h> void sort(int arr[],int size,bool(*comp)(int,int)) { for(int i=0;i<size-1;i ) for(int j=0;j<size-i-1;j ) if(comp(arr[j],arr[j 1])) { int t = arr[j 1]; arr[j 1] = arr[j]; arr[j]=t; } } bool Comp(int a,int b) { return a<b; } int main(void) { int arr[]={2,1,4,5,3,9,6,8,7}; int n = sizeof arr / sizeof *arr; sort(arr,n,Comp); for(int i=0;i<n;i ) printf("%d ",arr[i]); getchar(); return 0; }

4 函數指針做函數返回值

用函數返回函數指針,可以讓同類函數具有相同的接口。

#include <stdio.h> enum Op { ADD = ' ', SUB = '-', }; int add(int a, int b) { return a b; } int sub(int a, int b) { return a - b; } /* getmath: return the appropriate math function */ int (*getmath(enum Op op))(int,int) { switch (op) { case ADD: return &add; case SUB: return ⊂ default: return NULL; } } int main(void) { int a, b, c; int (*fp)(int,int); fp = getmath(ADD); a = 1, b = 2; c = (*fp)(a, b); printf("%d %d = %d\n", a, b, c); getchar(); return 0; }

-End-

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
rtx 3050顯卡能玩什麼遊戲
rtx 3050顯卡能玩什麼遊戲
《守望先鋒:歸來》是由暴雪制作開發的一款第一人稱遊戲,是《守望先鋒》的續作,遊戲加入了新的LOGO、新遊戲地圖和英雄,以及PVE遊戲模式,而且不再采用1代的買斷制,而是免費向廣大遊戲玩家開放,讓所有喜歡該系列,無論是玩過還是沒有玩過的玩家都...
2024-10-05
excel怎麼用函數提取名稱
excel怎麼用函數提取名稱
上一期的文章,我跟大家分享了用PowerQuery的方法來提取文件列表名稱,很多粉絲給我留言,問有沒有用函數公式實現的方法,用函數公式比較麻煩,但也可以實現!提取整個文件列表名稱,Excel這個功能可以實現具體操作步驟如下:1、打開要提取文...
2024-10-05
玻璃吹制過程
玻璃吹制過程
人工吹制是玻璃制造中一種最常見,也是最早的制造方法,一件完美的吹制玻璃器皿又是如何呈現在我們的面前,又是具備哪些工具,不妨随着我們文字一塊來探尋究竟!工人對料帽多于部分處理人工吹制成型的基本工序為小泡、大泡、吹成型、定型及爐前熱加工,爐前熱...
2024-10-05
手機可以更換的配件有哪些
手機可以更換的配件有哪些
很多小夥伴将手機買回來,喜歡給手機搭配各種零配件,殊不知,你以為這是為手機好,其實,不但對手機有危害,對于我們自己也有危害。手機小風扇手機小風扇那麼小的體積,根本就吹不出多少風,而且對于手機電池也有極大損害。首先,除了那些特定的充電寶手機,...
2024-10-05
自己動手組裝電腦都需要什麼工具
自己動手組裝電腦都需要什麼工具
這裡是太平洋知科技,如果本文對你有幫助,歡迎點贊【關注】我。往期精彩回顧:如何長時間保存重要數據?拒絕U盤,拒絕網盤前幾天說了DIY電腦:自己動手裝機有哪些坑需要注意?今天就來說一下『小白如何自己組裝一台電腦』前排提示:本文可能即刻不需要,...
2024-10-05
Copyright 2023-2024 - www.tftnews.com All Rights Reserved