C函式引數傳遞 和 區別的研究

2021-07-06 03:26:11 字數 1036 閱讀 6979

眾所周知,&是取位址,函式引數前有&是傳遞位址,*是指標;那*&有什麼用呢?下面先看一下眾多網友的解釋

對於int *&a:  

1.int*& a: a is a reference of pointer to int

2.c++裡面的引用,

a是對另乙個int *型別變數的引用;

3.指向指標的指標;

4.原來a不是int型別,比如說是char型別,

那麼&a得到的應該是char*型別,

現在使用int*強制轉換到int*型別。

觀上幾種解釋,我認為1、2、3是有道理的,4是牛頭不對馬嘴。

首先,必須要說明的是*&是有用的,效果和單獨乙個*或&是不同的,對引用有所了解的同學對於引用的引用(指標的指標)也不難理解。下面我們先做個試驗

我們要了解變數需要乙個空間儲存的,這就引出了變數的位址,引數傳遞是就可以傳遞位址過去;那麼我們也可以把位址放到乙個儲存空間裡,這就有了位址的位址,這裡就不得不說一下'->'這個符號,他能從位址或位址的位址找到物件:eg如有一結構體sqlist,,方法 void createlist(sqlist *&l.....) 方法中l->data[i] = a[i]。所以傳遞位址的位址時不必擔心使用的複雜。

//程式1

#include

using namespace std;

void test(int *&p,int &a)

{cout<<&p《這個 程式輸出的兩個值一樣大小一樣,說明儲存int指標的位址是一樣的

//c程式2

#include

using namespace std;

void test(int *p,int &a)

{cout<<&p《這個 程式輸出的兩個值不一樣,說明儲存int指標的位址不相同的

在程式1中可修改p的值,在函式結束後仍能儲存修改修改方式可直接為 p = ...

在程式2中有兩種修改方式:1.  p = b;2. *p = 4。其中1修改的結果不能再函式外有效,2可以在函式外有效

簡而言之,使用*和使用*&要看希望的效果是什麼。

C 中如何把函式當做引數傳遞到別的函式中

問題 c 想要傳遞函式引數,但是引數型別是函式,不知道如何傳遞。解決過程 1.找了半天,看到這裡 把函式名作為引數傳遞 c 委託的宣告和使用,說到用delegate,但是感覺有點複雜,而且不太像是能方便的解決此處的問題。2.說實話,找了其他一些類似的帖子,還是沒太看懂。3.不過最後還是自己在他們的描...

c 函式引數傳遞

void reset int num void creset const int num void preset int p void cpreset const int p void rreset int arr 10 void initiaresert initializer listlist ...

C 函式位址傳遞和值傳遞區別

目錄 c 位址傳遞和值傳遞區別 1 位址傳遞vs值傳遞 2 演示 相當於通過尋找位址 傳遞,然後 解引用,修改變數的值。void swap int p1,int p2 swap a,b 呼叫值傳遞 之間進行形參內部的值的改變,不會改變實參,只會影響形參。相當於在函式內部做了賦值的操作。void sw...