c語言調用數組實參,C語言數組形參

本文目錄一覽:

C語言數組作為形參實參的一些疑惑?

void fun(int arr[], int n);

在函數定義的時候,形參int arr[]不是表示某個元素的值,而是告訴編譯器第一個參數是一個數組指針,可以接收實參傳過來的數組地址。

實際上以上定義等價於下面的定義。

1.數組裡面帶元素個數:

void fun(int arr[常數], int n);

這裡的常數可以是任意正整數,實際上編譯器是會忽略,因為這裡只要告訴編譯器我接收的是一個數組指針,至於它有多少個元素不關心,因為實參也只是傳個地址過來。元素個數由參數二控制。至於為什麼要這麼約定可以看下面補充說明。

2.void fun(int *arr, int n);

使用指針,這種方式和題目中的方式是最常用的方式,第一種最不常用。

補充說明(為什麼數組作為函數參數是傳地址,而不是傳每個元素):

設想一下,有一個函數如下

int fun(int nums[1000], int size)

它的參數一要處理1000多個元素的數組,如果是傳值即每個元素,那在函數體內是不是就得再申請1000多個整數的內存,還需要把值從實參那裡複製過來,這是非常耗時間的而且沒有必要,因為在內存的某個塊已經存放了這些數據。只要告訴放在哪個位置,你函數體去那裡找就行了。這裡說的就是傳地址了,只需要傳個數組首地址,然後告訴有多少個元素要處理就OK了。傳地址只需要複製地址給形參,相對傳每個元素快得多。

C語言中數組名作為實參傳給被調用的函數時,形參獲得的是什麼

C語言中數組名作為實參傳給被調用的函數時,形參獲得的是數組的起始地址。

還是用例子說話吧。

#includestdio.h

int *arry(int *a)

{

int *b;

b = a;

int i;

for(i=0;i5;i++)

{

printf(“%d”,a[i]);

} return b;

}

int main()

{

int a[5] = {1,2,3,4,5};

int *c;

int i;

c = arry(a);

for(i=0;i5;i++)

{

printf(“%d”,c[i]);

}

}

主要是通過指針把數組,例如main裡面的a的地址傳入arry函數,然後在arry函數中用一個兼容類型的指針接收地址,然後就可以再這個指針下的地址操作地址上面的數據了。

arry返回的時候也是返回一個指針(地址)。

C語言中,調用函數的實參是數組名,被調用函數的形參可不可以是指針

可以。是數組也行,如:

void f1(int a[])

{

}

void f2(int *p)

{

}

int a[]={1,2,3};

f1(a);

f2(a);

C語言中,數組名作為函數調用的實參時,下面敘述正確的是()。

正確的

B

例如:

f(int data[]);

f(int *data);

其實是等價的,都是一個指針傳遞。上面兩種無論那種都可以傳遞一個數組名,作為實參。

實參傳遞給的數組名,就是數組的首地址。

因此通過數組名,傳遞其實就是把數組的首地址給了形參,因此通過地址就可以改變實參數組相應的值。

C語言,二維數組調用時候形參和實參的問題

int addnn(int a[][n])

數組的下標必須是常數,不能用變數

而且二維數組第二維的大小要和傳遞進來的數組一樣大,因此應改為

int addnn(int a[][1024])

在我的計算機上定義a[1024][1024]數組過大,要改小一點

C語言關於一維數組做實參的問題

參數的兩種形式:

1、傳值:形參只是實參的一個副本,它只存在被調函數中,在被調函數中對形參的改變不會影響實參的值。

2、傳址:形參是實參的一個地址,在被調函數中對形參的改變會影響實參的值。

在c語言中,簡單變數默認是傳值,而數組默認是傳址。

所以出現你所說的一系列怪現象。

好好想一下,若還不明白請留言。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238967.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:14
下一篇 2024-12-12 12:14

相關推薦

  • Python導入數組

    本文將為您詳細闡述Python導入數組的方法、優勢、適用場景等方面,並附上代碼示例。 一、numpy庫的使用 numpy是Python中一個強大的數學庫,其中提供了非常豐富的數學函…

    編程 2025-04-29
  • Python返回數組:一次性搞定多種數據類型

    Python是一種多用途的高級編程語言,具有高效性和易讀性的特點,因此被廣泛應用於數據科學、機器學習、Web開發、遊戲開發等各個領域。其中,Python返回數組也是一項非常強大的功…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python去掉數組的中括弧

    在Python中,被中括弧包裹的數據結構是列表,列表是Python中非常常見的數據類型之一。但是,有些時候我們需要將列表展開成一維的數組,並且去掉中括弧。本文將為大家詳細介紹如何用…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • Python操作數組

    本文將從多個方面詳細介紹如何使用Python操作5個數組成的列表。 一、數組的定義 數組是一種用於存儲相同類型數據的數據結構。Python中的數組是通過列表來實現的,列表中可以存放…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python二維數組對齊輸出

    本文將從多個方面詳細闡述Python二維數組對齊輸出的方法與技巧。 一、格式化輸出 Python中提供了格式化輸出的方法,可以對輸出的字元串進行格式化處理。 names = [‘A…

    編程 2025-04-29

發表回復

登錄後才能評論