c 基礎 函式引數傳遞,陣列

2021-07-29 09:24:39 字數 2969 閱讀 6830

1. c++中函式引數傳遞

從概念上來說一下這幾種函式傳參方式及區別:

(1)值傳遞:形參是實參的拷貝,改變函式形參的值並不會影響外部實參的值,,返回值那是

return

考慮的;

(2)指標傳遞:

指標傳遞引數從本質上來說也是值傳遞,它傳遞的是乙個位址

。【值傳遞過程中,被調函式的形參作為被調函式的區域性變數來處理,即在函式內的棧中開闢記憶體空間以存放由主調函式放進來的實參的值,從而成了實參的乙個副本(

記住這個,函式內引數是實參的副本

)】。由於指標傳遞的是外部實參的位址,當被調函式的形參值發生改變時,自然外部實參值也發生改變。

void swap(int *a,int *b)

呼叫:swap(&x,&y); 

3被調函式對形參的任何操作都被處理成間接定址

,即通過棧中存放的位址訪問主調函式中實參變數(實參和形參通過引用,合二為一,說白點就是:乙個人有兩個名字那種)。因此,形參的任何改動都會直接影響到實參。

void swap(int &a,int &b)

呼叫:swap(x,y); 

2. 函式引數傳遞&指標相關的典例

解析:

答案d,函式裡的形參s只是實參p的乙個複製,s=a改變了s的內容(如果在fun裡面輸出s,結果是string),但

並沒改變p的值

,更沒有改變其指向的內容。 2.

輸出結果:

解析:

前兩個是字元陣列,定義在棧上,明顯位址不同

字串常量定義在靜態區,僅有乙份拷貝,所以後面兩個指標指向的位址相同 3.

解析:

輸出:result is to test something

開始p指向「 glad to test something」中的g,然後p++,指向l

int *p1 = reinterpret_cast(p); 把p賦值給int型了, p1++,即加了4個位元組位置。即p1指向「glad to test something」中的t

p = reinterpret_cast(p1); 把p1的轉回了p,p指向了「 glad to test something」中的t

輸出to test something

解析:b應該也是錯誤的,由於的優先順序高於*,因此,相當於對位址(x+ii)[j]取值,如果b改為(*(x+ii))[j]就對了

解析:acx

,acy

是2個陣列,屬於變數,一般存在棧區,可以修改,

szx,

szy是2個指標指向常量區,常量區的東西不能被修改,所以d是錯誤的

3. 陣列

二維陣列必須指定列的數量,行的數量可以不指定,二維陣列的初始化方式有以下幾種:

⑴ 分行進行初始化

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

⑵ 不分行的初始化

int a[2][3]=;

⑶ 為部分陣列元素初始化

static int a[2][3]=,};

第一行只有2個初值,按順序分別賦給a[0][0]和a[0][1];第二行的初值4賦給a[1][0]。由於儲存型別是static,故其它陣列元素的初值為0。

⑷ 可以省略第一維的定義,但不能省略第二維的定義。系統根據初始化的資料個數和第2維的長度可以確定第一維的長度。

int a[ ][3]=;

a陣列的第一維的定義被省略,初始化資料共6個,第二維的長度為3,即每行3個數,所以a陣列的第一維是2。

一般,省略第一維的定義時,第一維的大小按如下規則確定:

初值個數能被第二維整除,所得的商就是第一維的大小;若不能整除,則第一維的大小為商再加1。例如,int a[ ][3]=;等價於:int a[2][3]=;

若分行初始化,也可以省略第一維的定義。下列的陣列定義中有兩對,已經表示a陣列有兩行。

static int a[ ][3]=,};

二維動態陣列的申請和刪除:

首先是如何申請二維的陣列,這裡我們先申請乙個指標陣列,然後令指標陣列中的每乙個元素都指向乙個陣列:

int**mathtable =

newint

*[row];

for(

inti =

0; i < row; i++)  mathtable[i] =

newint

[col];

釋放空間:

for(int

i =0

; i < row;i++)

delete

mathtable[i];

delete

mathtable;

C 函式引數傳遞 陣列形參

1 三種傳遞陣列的寫法 下面這三種寫法本質是一樣的 void fun1 int x,size t size void fun2 int x,size t size void fun3 int 10 x,size t size 這個10其實是沒用的,編譯器會忽略掉 2 形參的長度會引起誤解 3 陣列實...

陣列作為函式引數傳遞

陣列有兩個特殊的性質。一是不能複製陣列 二是使用陣列名字時,陣列會自動轉化為指向其第乙個元素的指標。由於陣列不能複製,所以無法編寫使用陣列型別形參的函式,因為陣列會被自動轉化為指標。一 一維陣列 1.三種定義形式 void printvalues int void printvalues int v...

陣列作為函式引數傳遞

重點 在c中,陣列是不能作為引數進行傳遞的,但是可以通過傳遞指向陣列初始元素的指標,使得在函式內部運算元組成為可能。在函式這一側,可以通過array i 引用陣列的內容。why?本質上array i 不過是 array i 的語法糖。include void func int array,int s...