C語言中函數(shù)參數(shù)傳遞的兩種方式(“引用傳遞做函數(shù)參數(shù)”是C++的特性,C語言不支持。)
(1)傳值,就是把你的變量的值傳遞給函數(shù)的形式參數(shù),實際就是用變量的值來新生成一個形式參數(shù),因而在函數(shù)里對形參的改變不會影響到函數(shù)外的變量的值。
(2)傳址,就是傳變量的地址賦給函數(shù)里形式參數(shù)的指針,使指針指向真實的變量的地址,因為對指針?biāo)傅刂返膬?nèi)容的改變能反映到函數(shù)外,也就是能改變函數(shù)外的變量的值。一般有變量地址作為參數(shù)、數(shù)組名作為參數(shù)、指針作為參數(shù)。
下面的demo中:
test函數(shù)以結(jié)構(gòu)體數(shù)組名為形參;
test1函數(shù)以結(jié)構(gòu)體數(shù)組的首地址和數(shù)組大小作為形參;
test2函數(shù)是把結(jié)構(gòu)體數(shù)組的首地址傳入,然后以數(shù)組的形式遍歷;
#include #include #define MAXNUM (2)typedef struct tagNumber{ int i; int j; int k;}TNum;typedef struct tagNumbers{ TNum atNum[MAXNUM];}TNums;// 結(jié)構(gòu)體數(shù)組名void test (TNums atNums1[]){ printf("atNums1 ptr:%p/r/n",atNums1); int idx = 0; int idx1 = 0; for(idx = 0; idx < MAXNUM; idx++) { for(idx1 = 0; idx1 < MAXNUM; idx1++) { printf("i:%d/n",atNums1[idx].atNum[idx1].i); printf("j:%d/n",atNums1[idx].atNum[idx1].j); printf("k:%d/n",atNums1[idx].atNum[idx1].k); } }}//結(jié)構(gòu)體指針1.0void test1(TNums *ptNum,int num){ printf("ptNum ptr:%p/r/n",ptNum); int idx = 0; int idx1 = 0; for(idx = 0; idx < num; idx++) { for(idx1 = 0; idx1 < num; idx1++) { printf("i:%d/n",(ptNum + idx)->atNum[idx1].i); printf("j:%d/n",(ptNum + idx)->atNum[idx1].j); printf("k:%d/n",(ptNum + idx)->atNum[idx1].k); } }}//結(jié)構(gòu)體指針1.1void test2(TNums *ptNum){ printf("ptNum ptr:%p/r/n",ptNum); int idx = 0; int idx1 = 0; for(idx = 0; idx < MAXNUM; idx++) { for(idx1 = 0; idx1 < MAXNUM; idx1++) { printf("i:%d/n",ptNum[idx].atNum[idx1].i); printf("j:%d/n",ptNum[idx].atNum[idx1].j); printf("k:%d/n",ptNum[idx].atNum[idx1].k); } }}int main() { TNums atNums[MAXNUM]; memset(atNums, 0, sizeof(atNums)); int idx = 0; int idx1 = 0; for(idx = 0; idx < MAXNUM; idx++) { for(idx1 = 0; idx1 < MAXNUM; idx1++) { atNums[idx].atNum[idx1].i = 1+idx; atNums[idx].atNum[idx1].j = 2+idx; atNums[idx].atNum[idx1].k = 3+idx; } } printf("atNums ptr:%p/r/n",atNums); printf("func 1:/r/n"); test(atNums); printf("func 2:/r/n"); test1(atNums, MAXNUM); printf("func 3:/r/n"); test2(atNums); return 0;}
打印信息:
atNums ptr:0x7fff87dba270func 1:atNums1 ptr:0x7fff87dba270i:1j:2k:3i:1j:2k:3i:2j:3k:4i:2j:3k:4func 2:ptNum ptr:0x7fff87dba270i:1j:2k:3i:1j:2k:3i:2j:3k:4i:2j:3k:4func 3:ptNum ptr:0x7fff87dba270i:1j:2k:3i:1j:2k:3i:2j:3k:4i:2j:3k:4
http://www.oh100.com/kaoshi/c/536660.html
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/118810.html
本章目錄 溫馨提示本章重點正文開始1. 操作符分類2.算數(shù)操作符2.1 `/`操作符2.2 `%`操作符 3. 位移操作符3.1 ``左移操作符 4. 位操作符4.1 `&`按位與操作符4.2 `|`按位或操作符4.3 `^`按位異或操作符 5. 賦值操作符6. 單目操作符6.1 各種單目操作符6.2 sizeof 和 數(shù)組 7. 關(guān)系操作符(后面的操作符不單獨出現(xiàn)在目錄中)8. ...
??C語言通訊錄管理系統(tǒng)(簡易版)?? ?一、通訊錄?二、菜單實現(xiàn)和用戶交互?三、主函數(shù)????1.enum選項????2.switch判斷 ?四、定義聯(lián)系人和通訊錄????1.定義聯(lián)系人結(jié)構(gòu)體????2.定義通訊錄結(jié)構(gòu)體????3.定義結(jié)構(gòu)體變量 ?五、通訊錄初始化?六、新增聯(lián)系人?七、查找聯(lián)系人?八、刪除聯(lián)系人?九、修改聯(lián)系人?十、查看所有聯(lián)系人?十一、清空所有聯(lián)系人?十二、以名字排序所有...
目錄 一、什么是C語言? 二、第一個C語言程序 代碼 程序分析 ?程序運行 一個工程中出現(xiàn)兩個及以上的main函數(shù) 代碼 運行結(jié)果 分析 三、數(shù)據(jù)類型 數(shù)據(jù)各種類型 為什么會有這么多的數(shù)據(jù)類型? 計算機單位 ?各個數(shù)據(jù)類型的大小 ?注意事項 數(shù)據(jù)類型的使用 四、變量和常量 變量的分類 變量的使用 變量的作用域和生命周期 ?常量 五、字符串+轉(zhuǎn)義字符+注釋 字符串 ?轉(zhuǎn)義字符 注釋 六、選擇語句 ?...
摘要:我們以冒泡排序為例,模擬實現(xiàn)函數(shù)。交換每單位字節(jié)對于的二進制序列這樣,冒泡排序就能排序多種數(shù)據(jù)類型,模擬實現(xiàn)了函數(shù),當(dāng)然也可以使用其他的排序方法模擬實現(xiàn)函數(shù)。 ??...
閱讀 4715·2021-11-18 13:23
閱讀 903·2021-09-22 15:24
閱讀 1927·2021-09-06 15:00
閱讀 2629·2021-09-03 10:30
閱讀 1287·2021-09-02 15:15
閱讀 2071·2019-08-30 15:54
閱讀 3035·2019-08-30 15:44
閱讀 1456·2019-08-29 15:12