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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【☀️C语言函数传参の结构体数组篇☀️】

發(fā)布時(shí)間:2025/3/15 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【☀️C语言函数传参の结构体数组篇☀️】 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

背景介紹

C語言中函數(shù)參數(shù)傳遞的兩種方式(“引用傳遞做函數(shù)參數(shù)”是C++的特性,C語言不支持。
(1)傳值,就是把你的變量的值傳遞給函數(shù)的形式參數(shù),實(shí)際就是用變量的值來新生成一個(gè)形式參數(shù),因而在函數(shù)里對(duì)形參的改變不會(huì)影響到函數(shù)外的變量的值。
(2)傳址,就是傳變量的地址賦給函數(shù)里形式參數(shù)的指針,使指針指向真實(shí)的變量的地址,因?yàn)閷?duì)指針?biāo)傅刂返膬?nèi)容的改變能反映到函數(shù)外,也就是能改變函數(shù)外的變量的值。一般有變量地址作為參數(shù)、數(shù)組名作為參數(shù)、指針作為參數(shù)。

  • 數(shù)組名作為參數(shù)時(shí),傳遞的是數(shù)組的首地址,實(shí)參數(shù)組和形參數(shù)組共用了一段內(nèi)存空間。所以當(dāng)用數(shù)組名做參數(shù)時(shí),實(shí)參和形參共享了一個(gè)數(shù)組,形參數(shù)組的改變也就是實(shí)參數(shù)組的改變。
  • 指針作為參數(shù)和數(shù)組名作參數(shù)類似,傳遞的也是結(jié)構(gòu)體數(shù)組的首地址,但是此時(shí)不是共享一個(gè)數(shù)組,而是共享一個(gè)變量的地址,也就是實(shí)參指針和形參指針共同指向同一個(gè)變量,共享同一個(gè)變量地址。
  • 示例demo

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

    #include <stdio.h> #include <string.h>#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.0 void 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.1 void 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:0x7fff87dba270 func 1: atNums1 ptr:0x7fff87dba270 i:1 j:2 k:3 i:1 j:2 k:3 i:2 j:3 k:4 i:2 j:3 k:4 func 2: ptNum ptr:0x7fff87dba270 i:1 j:2 k:3 i:1 j:2 k:3 i:2 j:3 k:4 i:2 j:3 k:4 func 3: ptNum ptr:0x7fff87dba270 i:1 j:2 k:3 i:1 j:2 k:3 i:2 j:3 k:4 i:2 j:3 k:4

    引經(jīng)據(jù)典

    http://www.oh100.com/kaoshi/c/536660.html

    總結(jié)

    以上是生活随笔為你收集整理的【☀️C语言函数传参の结构体数组篇☀️】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。