1樓:網友
首先,答案是肯定的。
因為陣列在記憶體中是一塊連續的記憶體,只要將該陣列的首位址傳進去,當然就可以訪問整個陣列了。值得注意的是,由於只傳了首位址,函式不知道陣列的維數,所以還得把陣列的維數傳進去,那就可以完全操作該陣列了。
例:有乙個函式宣告:void fun( int aa,int size );或者void fun( int *pa,int size );
以上兩種宣告都一樣。
呼叫上訴函式時:假設有 int ab[10];
fun( ab,10 )就可以了。
2樓:落葉深藍色
為什麼倒是不知道,反正我經常這麼用。
3樓:沒有響應
c語言都可以c++當然更可以了。。。
c++的陣列傳遞進函式時,明明是值傳遞,為什麼還是會對原來的陣列產生改變?
4樓:網友
你傳進去的是陣列,其實陣列相當於指標,陣列名就是這些元素的首位址,所以相當於你傳了乙個指標!當然會對陣列產生改變!
5樓:護戒之淼
傳的什麼都不會變的啊。
setarry只是在函式內部操作。
你要想改變要麼就位址傳或者引用傳值。
c++類中陣列引數怎麼傳遞到函式中?
6樓:網友
h是什麼?還有:指標a和b為空,不能直接用。
關於c++陣列在函式中傳遞的幾個問題
7樓:物理公司的
int a 和 int *a :
在做函式形參時,無區別,並且 int a 為「活化石」寫法(即不推薦寫法,因為 int a不能顯式的表示出我們要傳遞的是乙個指標),但是有些程式設計師認為 int a 更好,因為 *a 不能表示出函式所需要的物件是陣列還是乙個單物件的指標。所以,仁者見仁,我個人更推崇int *a。
總結:這兩種寫法都表示我們要傳遞乙個指標,在函式內部可以對a賦其他值。(在用作陣列變數時,陣列名只能做「指標常量」,但做陣列型形式引數時,兩者相同)
關於c++中函式傳入陣列引用的問題
8樓:小鑫聊兩性
表示對seq指標的引用。
這樣做有一點,可以看一下。
void new1(int *ptr, int size)}void new2(int& *ptr, int size)}上面兩段**中,new1是沒有用的,並不能為ptr分配空間而new2可以正常工作。
因為new2中使用的是ptr指標的引用。
int *ptr只能讓new1這個函式得到ptr的內容int& *ptr不只能讓new2這個函式得到ptr的內容,還使new2函式得到ptr指標的本身。
這樣說不知道你能不能理解。
9樓:網友
就是seq是表示引用的,&seq的話用在二維陣列中。
10樓:九幽蛙魔
對於形參而言:
1、&表示引用, *表示指標(即你說的陣列),兩者都可以修改而且只能修改所表示的記憶體中這塊空間的內容;
2、如果傳入如你所說的形參形式,表示不僅可以修改這塊記憶體空間的內容,而且指標(即你說的陣列)指向記憶體塊位置也可以被修改,即不僅可以修改seq指向空間的值,也可以修改seq指向的空間位址。
c++中陣列的傳遞方式?
11樓:網友
看如何定義陣列,但是無論如何,必須要傳的是陣列的開始位址和陣列長度。
方式一如果你的陣列是比較簡單的定義,例如要傳乙個字串陣列。
char mychararray[200];
函式定義如下。
bool myfunction(char* myarray, int arraylength);
那麼可以這樣呼叫。
bool retval = myfunction(mychararray, 200);
方式二如果陣列用了比較高階的結構,為了效率,傳引數時應傳結構的位址或者指標,例如定義了。
typedef carraycintarray;
cintarray myarray
函式定義如下 bool myfunction(cintarray& arr);
那麼可以這樣呼叫bool retval = myfunction(myarray);
或者, 函式定義也可以是 bool myfunction2(cintarray* arr);
那麼可以這樣呼叫。
12樓:網友
你的問題才應該詳細一點?是作為引數?那就用指標或者引用。
c++把陣列當做引數傳遞到方法裡的小問題。
13樓:網友
陣列作為引數傳遞,傳遞的是陣列的起始位址,可以認為是a指標的副本,因為在傳遞過程中以及在函式func中a退化為int*,而不再是與a相同的指標常量,這些對原呼叫函式中的a沒有影響。
直接定義引用型別的比較少吧?一般在函式宣告的引數宣告部分使用引用型別,目的在於實現對引數的修改,相當於指標,但比指標容易和安全,因此可以認為是傳遞的其位址。
一般直接傳遞都為 傳值傳遞,即僅將實參副本傳入函式,函式中隊形參的修改不會影響實參。
若要求實現對實參的修改,一般需要宣告為形參引用。
14樓:倒黴熊
1:傳進去的指標是最初定義a時的指標。
在普通變數或下標變數作函式引數時,形參變數和實參變數是由編譯系統分配的兩個不同的記憶體單元。在函式呼叫時發生的值傳送是把實參變數的值賦予形參變數。在用陣列名作函式引數時,不是進行值的傳送,即不是把實引數組的每乙個元素的值都賦予形引數組的各個元素。
因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體。那麼,資料的傳送是如何實現的呢? 陣列名就是陣列的首位址。
因此在陣列名作函式引數時所進行的傳送只是位址的傳送, 也就是說把實引數組的首位址賦予形引數組名。形引數組名取得該首位址之後,也就等於有了實在的陣列。實際上是形引數組和實引數組為同一陣列,共同擁有一段記憶體空間。
2:傳他們各自的乙個副本。
15樓:網友
創造乙個a的指標的副本,然後再把這個副本傳進去。
定義了乙個int c = 3,還有乙個引用型別,比如int &c; 如果把他們分別傳進相應的方法,他們是傳本身。
16樓:
就拿上例來說 如果執行func(a) 則是將實參a陣列的首元素的位址傳遞給形參b,也就是說 a和b一起佔同一段記憶體單元 這個與變數作為函式引數是不同的 不需要創造副本 你說的第二個問題是引用傳遞 引用傳遞跟剛才的陣列(指標)傳遞一樣 傳的是他們的位址 也就是不需要創造副本 與此還有乙個值傳遞 這個是需要創造副本的 而且 函式對傳遞的值 沒有任何改變 隻影響在函式體中產生的副本的值 你可以就指標傳遞 引用傳遞 還有值傳遞 研究一下 有利於以後的深入學習。
c中如何給函式傳遞陣列引數,c中關於陣列作為函式引數的幾種方法
對於陣列 名作為參bai 數傳遞,有兩種du方式 1.使用zhi陣列名本身,如以下dao 程式求陣列專a的最大值屬 include int max int x,int n 作為陣列定義形式int main void int m m max a,5 陣列名用為實參printf a的最大值 d n m ...
c語言陣列中a為什麼和a,c語言陣列中a為什麼和a0相等
因為陣列的首地址也就是陣列名,你的陣列名為a,則 意思是取內容,a就是 a地址的內容 a地址又因為是首地址和a 0 一樣,所以可以說 a a 0 望樓主採納 首先a是一個地址,來它指自向的是陣列的首地址。a可以運算元組中的所有元素。舉個例子,假如b 5 指標a指向b陣列,a就是b 0 也就是5 的地...
c 類函式中怎麼返回和使用二維陣列
include using namespace std class foo foo foo foo foo 返回指向二維陣列的指標函式 int foo test2darray unsigned r,unsigned c return arr2d int main cout endl 釋放記憶體 fo...