c 中為什麼陣列地址可以作為引數傳遞而不能直接賦值給別的陣列呢

時間 2021-09-11 22:33:35

1樓:匿名使用者

這是甲魚的臀部--規定.

因為陣列名錶示陣列的首地址,int b它要定義自己的陣列空間,當然不能用別的陣列的空間,所以不能把a傳給它.但陣列作為引數傳遞時,array只是個臨時指標變數,函式還是直接對實引數組進行操作,不需要另外生成陣列.

樓上兩位說的a的指標,其實就是陣列首元素的指標,即陣列首地址,只不過我們平時說話不會太嚴格,所以導致了你的誤解而已.

2樓:吳小王

這是c語言的缺限,也就是說陣列不能賦。但指標可以!如:

int *p;

int a[5] = ;

p = a;//可行!

則有:*p = 1;

*(p+1) = 2;

.....

但是陣列就不可以了!

int b = a;//........是絕對不行的!

當你看到指標的時候就知道了!其實陣列可以用指標代替!

3樓:匿名使用者

int *b=a;

x(a);也是傳過去a的指標.不是賦值

4樓:匿名使用者

陣列名a是一個指標常量,記錄著陣列的起始地址,即指向陣列首元素a[0]的指標,a的值不能改變,否則曾分配的空間就無法釋放**。

指標變數可以存放地址,可以將陣列的首地址存放到一個指標變數中,利用指標變數訪問元素就靈活方便多了,因此可以int *p=a; 函式引數傳遞的也是陣列首地址。

c++中陣列作為引數,有按值傳遞和按地址傳遞這兩種方式麼?

5樓:風若遠去何人留

都是傳地址.

不過地址也是有區別的.

傳陣列名本身, 屬於按值傳遞,即使它是第一個地址值.

傳遞陣列地址,或者傳遞陣列引用, 屬於傳地址.

但實際上,由於陣列名不許修改值,傳地址並沒有什麼意義.

c++ 函式以陣列為引數時如何使用值傳遞而不使用引用傳遞?

6樓:匿名使用者

陣列引數只能使用引用傳遞。

想不改變傳進去的陣列的值,可以在函式中,定義一個新陣列,把傳進去的陣列的值賦給新陣列。然後操作新陣列

7樓:匿名使用者

要麼換個方式

void abc(int a)

main() }

8樓:發假或一半訊息絕戶

這還真是個有意義的問題,具體怎麼傳我也不會,不過你可以在函式裡面新建立一個陣列,然後把引數陣列裡面的值拷貝到新建陣列裡面,這樣就可以操作新建立的陣列,不會改變以前陣列的值了

9樓:虎璟牛巨集盛

靠引數,辦不到,你可以自己複製一個陣列再傳進去。

j**a類中用類的陣列作為函式引數傳給類,為什麼不能直接對類的陣列進行操作?

10樓:愛之尊者

你說不行的**段,關鍵在這:62616964757a686964616fe78988e69d8331333361313935(簡稱為**①)

student stu = new student[5];

admin a = new admin();

a.wyx(stu);

以及呼叫的時候:(簡稱為**②)

public void wyx(student stu)

而後面你說可以的方法是這樣的(簡稱為**③)

public void wyx(student stu)

為什麼不可以?這裡你首先要清楚你在wyx方法裡用到的形參是一個student物件的陣列,在**②中,你直接使用stu[0].setname(name);,那麼要想取得它的前提就是你的下標0有存在的物件,也就是你必須在你**①裡給你的stu 物件的0下標賦值,也就是:

stu[0] = new student();

否則你只是給陣列開闢了大小,但並未在相應的位置給定例項化的物件,那麼你在**段②裡直接引用是引用到空指標上的,並不存在物件。恰好你在**①中就只是使用了

student stu = new student[5];

並沒有對陣列裡的做物件的初始化,所有你這個**執行時會出錯。

**段③裡,就恰恰符合上面所說,你建立一個新的物件:

student stud = new student();

再給它賦值了name,最後把這個物件給了stu陣列物件的0下標

stu[0] = stud;

這樣你的stu[0]具有正確的物件引用,你在後面的輸出中呼叫它就正常了。

如果說你要前面方法可用,改為下面方式:

public class 類對類的操作

}另外有一些簡單的建議:

你的**段裡對陣列的寫法使用的是student stu,那麼比較建議的寫法是student stu;

如果你真的要傳遞student stu = new student[5];,那麼有兩種建議:

① 你給你的陣列物件先例項化好,可以用迴圈,如果沒學到迴圈,可以一個一個建立;

② 如果不想在建立時候就例項化,那麼也可以在使用的時候進行判斷,判斷如果是空引用,不包含物件再進行例項化,關鍵**如下:

if (null == stu[0])

11樓:一別永別

因為你的student[5]並沒初始化5個student物件,只是建立了一個可以容納5個student物件的陣列

跪求,c++中的向量問題,陣列在做函式引數時,傳遞的是陣列首地址,那麼向量在做函式引數時傳遞的是什麼

12樓:不懂多來問問

如果是按你上面那樣傳就是把整個向量都傳進去了。是按值傳遞(如果你不信可以試驗一下,這樣傳參時,在函式內部改變向量內容,不會影響向量本身)

int func(vector&a);這樣才是按引用傳值,傳遞的才是向量地址。 在函式內部改變了向量的內容會影響向量本身。

13樓:樂vov樂

這是容器吧,傳遞的也是首地址。

請問在c++中,物件陣列可不可以作為函式引數來傳遞呢?如果要用指標,該怎麼使用呢?

14樓:成都

#include

#include

using namespace std;

void passbyarray( int arr, int length )

{int i =0;

for( ;i< length;++i ){cout<

瞭解指標,瞭解陣列和指標的關係,接下來就容易了。

15樓:匿名使用者

可以,形參為物件指標,實參可以直接傳遞陣列的名字。

記得帶一個陣列個數的引數。

16樓:匿名使用者

形參非陣列引用時實參自動array-to-pointer conversion。形參退化類似。

17樓:匿名使用者

物件陣列與非物件陣列有什麼區別嗎?

c++把陣列當做引數傳遞到方法裡的小問題。

18樓:匿名使用者

陣列作為引數傳遞,傳遞的是陣列的起始地址,可以認為是a指標的副本,因為在傳遞過程中以及在函式func中a退化為int*,而不再是與a相同的指標常量,這些對原呼叫函式中的a沒有影響

直接定義引用型別的比較少吧?一般在函式宣告的引數宣告部分使用引用型別,目的在於實現對引數的修改,相當於指標,但比指標容易和安全,因此可以認為是傳遞的其地址

一般直接傳遞都為 傳值傳遞,即僅將實參副本傳入函式,函式中隊形參的修改不會影響實參

若要求實現對實參的修改,一般需要宣告為形參引用

19樓:倒黴熊

1:傳進去的指標是最初定義a時的指標.

在普通變數或下標變數作函式引數時,形參變數和實參變數是由編譯系統分配的兩個不同的記憶體單元。在函式呼叫時發生的值傳送是把實參變數的值賦予形參變數。在用陣列名作函式引數時,不是進行值的傳送,即不是把實引數組的每一個元素的值都賦予形引數組的各個元素。

因為實際上形引數組並不存在,編譯系統不為形引數組分配記憶體。那麼,資料的傳送是如何實現的呢? 陣列名就是陣列的首地址。

因此在陣列名作函式引數時所進行的傳送只是地址的傳送, 也就是說把實引數組的首地址賦予形引數組名。形引數組名取得該首地址之後,也就等於有了實在的陣列。實際上是形引數組和實引數組為同一陣列,共同擁有一段記憶體空間。

2:傳他們各自的一個副本

20樓:匿名使用者

創造一個a的指標的副本,然後再把這個副本傳進去

定義了一個int c = 3,還有一個引用型別,比如int &c; 如果把他們分別傳進相應的方法,他們是傳本身

21樓:

就拿上例來說 如果執行func(a) 則是將實參a陣列的首元素的地址傳遞給形參b,也就是說 a和b一起佔同一段記憶體單元 這個與變數作為函式引數是不同的 不需要創造副本 你說的第二個問題是引用傳遞 引用傳遞跟剛才的陣列(指標)傳遞一樣 傳的是他們的地址 也就是不需要創造副本 與此還有一個值傳遞 這個是需要創造副本的 而且 函式對傳遞的值 沒有任何改變 隻影響在函式體中產生的副本的值 你可以就指標傳遞 引用傳遞 還有值傳遞 研究一下 有利於以後的深入學習

c++裡的陣列作為引數怎麼傳遞

22樓:哎呀

將資料的名bai稱當成指標直接傳入du就好。

示例**及解說如zhi下:dao

//下三行基本環境

#include

#include

using namespace std;

//定義一個專需要傳入 整數數屬組 作為引數的函式int myfun(int a)

//主函式 進行 子函式呼叫

main()

{ int ay[5]; //定義一個陣列ay[0] = 121; //讓資料的0號位的值為 121ay[2] = myfun(ay); //呼叫,並讓返回值放到 陣列的 2號位

cout<< ay[2] <

c 中二維陣列作為引數傳遞到函式

問明 方法1 第一維的長度可以不指定 但必須指定第二維的長度。include void print a int a 5 int n,int m int i,j for i 0 i n i for j 0 j m j printf d a i j printf n 方法2 指向乙個有5個元素一維陣列的...

c語言中如何將二維陣列作為函式的引數傳遞

鄞臨婁溶溶 在c語言中可以用二維陣列作為實參或者形參。1 函式中用二維陣列作為形參,函式宣告中可以指定所有維數的大小,也可以省略第1維的維數如 void f int array 3 10 正確 void f int array 10 正確上面的兩種二維陣列形參表示都是正確的。2 函式中用二維陣列作為...

c 中引數的傳遞 是什麼過程

簡單的說吧。引數傳遞 如果是按值傳遞 那麼物件到函式中就要被複製一次。如果是按引用傳遞 那麼只需複製物件的位址即可。對於c 來說。凡是結構 即struct定義的 全都用按值複製 如果在函式中改變那個引數 則實參不會改變。例如change char p 如果在change中p這個引數被改變了。那麼 c...