C 中陣列名 指標的引用傳遞

2021-07-13 18:57:12 字數 1380 閱讀 2456

int (&b)[5] = a;

一直以來我都認為只有在進行函式的引數傳遞時才會使用到引用傳遞,後來發現引用傳遞也可以在普通的**中使用,相當於給變數增加了乙個別名,如下面的**:

#include using namespace std;

int main()

輸出結果為21,說明b成為了a的乙個別名。

此外,陣列名也可以進行引用傳遞,使用方法如下:

#include using namespace std;

int main()

; int (&b)[5] = a;

for(int i = 0; i < 5; i++)

cout << b[i] << endl;

return 0;

}

int (&b)[5] = a;
中不是5時,編譯器會報錯。

#include using namespace std;

void output(int (&a)[5])

int main()

; output(a);

return 0;

}

同樣地,陣列長度不同時編譯器會報錯。

指標也能進行引用傳遞,寫法如下:

int *p = &a;

int *&p1 = p;

則b是int型指標p的乙個引用,指向指標的引用有時會被用作函式的形式引數。

那麼什麼時候會使用到指標的引用傳遞呢——當需要對指標本身的值進行修改時,如下面的c++**:

#define maxsize 50

typedef char elemtype;

typedef struct

sqlist;

void initlist(sqlist *&la)

sqlist *l;

initlist(l);

**初始化乙個順序儲存的線性表,函式initlist中要對la賦值,la是l的乙個別名,因此要用到指標的引用傳遞。

此時如果形參寫作 sqlist *la,當後續函式對順序表進行操作時會發生執行時錯誤,

因為此時la是乙個臨時變數,initlist函式結束後被釋放,l並未分配到空間。

當不需要對指標本身的值進行修改,而只需修改其所指向的物件時,使用指標的值傳遞與引用傳遞皆可,如下面**:

void displist(sqlist *l)	 

參考文章:

Js c c 中的指標 引用和陣列名

指標和引用學了好久,還是偶爾會弄混淆,簡單記錄分析一下區別吧,有記起來新的區別就不斷更新新增進去 1 指標可以多次重新分配,引用在無法重新分配,而且必須在宣告的時候被初始化 2 指標可以指向空 即被定義為nullptr 但是引用必須指向乙個東西 3 不存在 引用計算 這種東西 但是你用 d 5 這種...

C 陣列名與指標

1.緣起 由乙個題目引起的 問下面 輸出的是什麼?const char psz hello world int iarr cout sizeof psz endl cout sizeof iarr endl 前者輸出是4,輸出的是psz的型別大小,即指標型別佔4個位元組 在win32下 後者輸出是2...

C 陣列名與指標

陣列名a代表乙個固定的位址,內涵在於其指代實體是陣列這種資料結構,可以理解為指標常量,但不是指標常量!比如sizeof a 等於5,而sizeof 指標 等於4 另外陣列名a不能用作左值 形參陣列名b是指標變數,在函式fun中可以用作左值。陣列名a作右值時,a代表陣列首元素的位址,而 a代表整個陣列...