国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【??C語言函數傳參の結構體數組篇??】

20171112 / 1277人閱讀

背景介紹

C語言中函數參數傳遞的兩種方式(“引用傳遞做函數參數”是C++的特性,C語言不支持。
(1)傳值,就是把你的變量的值傳遞給函數的形式參數,實際就是用變量的值來新生成一個形式參數,因而在函數里對形參的改變不會影響到函數外的變量的值。
(2)傳址,就是傳變量的地址賦給函數里形式參數的指針,使指針指向真實的變量的地址,因為對指針所指地址的內容的改變能反映到函數外,也就是能改變函數外的變量的值。一般有變量地址作為參數、數組名作為參數、指針作為參數。

  1. 數組名作為參數時,傳遞的是數組的首地址,實參數組和形參數組共用了一段內存空間。所以當用數組名做參數時,實參和形參共享了一個數組,形參數組的改變也就是實參數組的改變。
  2. 指針作為參數和數組名作參數類似,傳遞的也是結構體數組的首地址,但是此時不是共享一個數組,而是共享一個變量的地址,也就是實參指針和形參指針共同指向同一個變量,共享同一個變量地址。

示例demo

下面的demo中:
test函數以結構體數組名為形參;
test1函數以結構體數組的首地址和數組大小作為形參;
test2函數是把結構體數組的首地址傳入,然后以數組的形式遍歷;

#include #include #define MAXNUM (2)typedef struct tagNumber{    int i;    int j;    int k;}TNum;typedef struct tagNumbers{    TNum atNum[MAXNUM];}TNums;// 結構體數組名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);        }    }}//結構體指針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);        }    }}//結構體指針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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/118810.html

相關文章

  • C語言初階】?? 教你使用C語言中的各種操作符(熟練運用+必須收藏)??

    本章目錄 溫馨提示本章重點正文開始1. 操作符分類2.算數操作符2.1 `/`操作符2.2 `%`操作符 3. 位移操作符3.1 ``左移操作符 4. 位操作符4.1 `&`按位與操作符4.2 `|`按位或操作符4.3 `^`按位異或操作符 5. 賦值操作符6. 單目操作符6.1 各種單目操作符6.2 sizeof 和 數組 7. 關系操作符(后面的操作符不單獨出現在目錄中)8. ...

    source 評論0 收藏0
  • ??C語言通訊錄管理系統(簡易版)??

    ??C語言通訊錄管理系統(簡易版)?? ?一、通訊錄?二、菜單實現和用戶交互?三、主函數????1.enum選項????2.switch判斷 ?四、定義聯系人和通訊錄????1.定義聯系人結構體????2.定義通訊錄結構體????3.定義結構體變量 ?五、通訊錄初始化?六、新增聯系人?七、查找聯系人?八、刪除聯系人?九、修改聯系人?十、查看所有聯系人?十一、清空所有聯系人?十二、以名字排序所有...

    justCoding 評論0 收藏0
  • ??整理2萬字帶你走進C語言(詳細講解+代碼演示+圖解)??(強烈建議收藏!!!)

    目錄 一、什么是C語言? 二、第一個C語言程序 代碼 程序分析 ?程序運行 一個工程中出現兩個及以上的main函數 代碼 運行結果 分析 三、數據類型 數據各種類型 為什么會有這么多的數據類型? 計算機單位 ?各個數據類型的大小 ?注意事項 數據類型的使用 四、變量和常量 變量的分類 變量的使用 變量的作用域和生命周期 ?常量 五、字符串+轉義字符+注釋 字符串 ?轉義字符 注釋 六、選擇語句 ?...

    邱勇 評論0 收藏0
  • 怎么樣才能做到對多種數據類型排序?C語言快速排序——qsort函數及其模擬實現

    摘要:我們以冒泡排序為例,模擬實現函數。交換每單位字節對于的二進制序列這樣,冒泡排序就能排序多種數據類型,模擬實現了函數,當然也可以使用其他的排序方法模擬實現函數。 ??...

    alphahans 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<