函式形參 陣列 結構體

2021-10-04 13:04:45 字數 4511 閱讀 2095

二 結構體作為形參

一維陣列名的值是乙個指標常量,他的型別是「指向元素型別的指標」,它指向陣列的第乙個元素。

例如:定義int a[10]

則 建立了 a ,他指向了乙個一維陣列,包含10個元素, a 的值是乙個指向他第乙個元素的指標。

*(a + 1)=a[1]

與一維陣列一樣,多維陣列名的型別也是「指向元素型別的指標」,它指向陣列的第乙個元素。唯一的區別就是多維陣列的第一維的元素是乙個陣列。

例如:定義int matrix[5][10]

則 建立了 matrix ,他可以看做是乙個一維陣列,包含3個元素,只是每個元素恰好是包含10個整型元素的陣列。

matrix 這個名字的值是乙個指向他第乙個元素的指標,所以 matrix 是乙個包含十個整型元素的陣列的指標。

*( *(a + 1)+3)=a[1][3]

3.1 作為引數的一維陣列

作為引數的多維陣列名的傳遞方式和一維陣列名相同,實際傳遞的是乙個指向陣列第乙個元素的指標。兩者之間的區別在於,多維陣列的每個元素本身是另乙個陣列。下舉例說明:

int a[10];

...fun(a)

引數 a 的型別是指向整型的指標,所以 fun 的原型可以是以下兩種中的任何一種:

void fun(int *b);

void fun(int b);

void

add_1

(int

*a,int num)

;void

add_2

(int a[10]

);void

add_3

(const

int a[10]

);intmain()

;add_1

(a,10);

add_2

(a);

add_3

(a);

cout <<

"*************"

<< endl;

for(

int i =

0; i <10;

++i)

return0;

}void

add_1

(int

*a,int num)

}void

add_2

(int a[10]

)//也能修改數值,有點想不通

}void

add_3

(const

int a[10]

)}

因為 a 是乙個指向整型資料的指標, b 也是乙個指向整型資料的指標。所以第一種可以。

3.2 作為引數的多維陣列

作為引數的多維陣列名的傳遞方式和一維陣列名相同,實際傳遞的是乙個指向陣列第乙個元素的指標。兩者之間的區別在於,多維陣列的每個元素本身是另乙個陣列。

int matrix[7][10];

...fun(matrix)

引數 matrix 的型別是指向包含10個整型元素的陣列的指標,所以 fun 的原型可以是以下兩種中的任何一種:

void fun(int (*b)[10]);

void fun(int b[10]);

matrix是乙個指向陣列的指標,b就是乙個指標陣列,是乙個指向整型陣列的指標,型別相同,所以可以作為函式原型。把fun 寫成下面就不對了:

void fun(int **c);

這個例子把 c 宣告為乙個指向整型指標的指標,他和指向整形陣列的指標型別並不相同。

void

add_1

(int

**a,

int row,

int col)

;void

add_2

(int

(*a)[10

],int row,

int col )

;//陣列指標的形式

void

add_3

(int a[

10],int row)

;void

add_4

(int

*a,int row,

int col)

;int

main()

;int kk =9;

int row =0;

while

(getline

(infile, line)

)//getline(infile, line)表示按行讀取csv檔案中的資料

getline

(sin, field,

',')

;//將字串流sin中的字元讀入到field字串中,以逗號為分隔符

buffer[0]

[row]

=atoi

(field.

c_str()

);getline

(sin, field,

',')

;//將字串流sin中的字元讀入到field字串中,以逗號為分隔符

buffer[1]

[row]

=atoi

(field.

c_str()

);getline

(sin, field,

',')

;//將字串流sin中的字元讀入到field字串中,以逗號為分隔符

buffer[2]

[row]

=atoi

(field.

c_str()

);row++

;//cout << field.c_str() << endl;//將剛剛讀取的字串轉換成int

} infile.

close()

; cout <<

"共讀取了:"

<< row <<

"行"<< endl;

cout <<

"讀取資料完成"

<< endl;

#endif

int a[2]

[10]=

,};//add_1((int **)a,2,10);

//add_2(a, 2, 10);

//add_3(a,2);

//add_4((int *)a,2,10);

cout <<

"*************"

<< endl;

for(

int i =

0; i <10;

++i)

return0;

}void

add_1

(int

**a,

int row,

int col)

}void

add_2

(int

(*a)[10

],int row,

int col)

cout << endl;}}

void

add_3

(int a[

10],int row)

}void

add_4

(int

*a,int row,

int col)

}

#include

#include

using namespace std;

void

printshu

(struct books book )

;// 宣告乙個結構體型別 books

struct books

;int

main()

void

printshu

(struct books book )

方式與定義指向其他型別變數的指標相似。為了查詢結構變數的位址,需要把 & 運算子放在結構名稱的前面。為了使用指向該結構的指標訪問結構的成員,必須使用 -> 運算子,當不是指標時,使用.運算子。

#include

#include

using

namespace std;

void

printshu

(struct books *book )

;struct books

;int

main()

// 該函式以結構指標作為引數

void

printshu

(struct books *book )

其中的函式宣告,void printshu( struct books *book );形參就類似於定義指標的int * p,此時 p 需要的是位址,所以當函式呼叫時,形參應該是結構體的位址。

結構體作為函式引數

c語言中結構體在函式中的應用 前兩天在編寫一段 時突然對結構體在函式中的用法有些模糊了,經過複習,基本弄清了這些知識,特總結如下 一 結構體與函式引數 結構体作函式引數可分為 傳值與傳指標。1 傳值時結構體引數會被拷貝乙份,在函式體內修改結構體引數成員的值實際上是修改呼叫引數的乙個臨時拷貝的成員的值...

結構體作為函式引數

結構體巨集觀上可以當做變數看待,可以作為函式引數,也可以作為函式返回值。再軟體程式設計上的使用,可以與c 的類,封裝的功能平分天下。將乙個結構體變數中的資料傳遞給另乙個函式,有下列 3種方法 用結構體變數名作引數。一般較少用這種方法。用指向結構體變數的指標作實參,將結構體變數的位址傳給形參。用結構體...

函式引數傳遞 陣列形參

二 用兩個指標傳遞陣列 三 多維陣列的傳遞 陣列有兩個特殊的性質 1.陣列是不能複製的。2.陣列的名稱實際上是指向陣列第乙個元素的指標。因此,我們在向函式傳遞陣列 的時候就可以用傳遞指標的方法。有三種傳遞陣列的方法 如下 x指向陣列的第乙個元素 void printvalues int x,size...