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

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

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語言中,整個陣列可以作為函式的返回值嗎

要知道,在c語言中返回值都是唯一的一個值,所以說整個陣列的各個元素值是不可以一次性作為返回值的,但是通常為了返回一個陣列,我們用的是返回這個陣列的首地址這種方法。 你好,返回陣列名返回的只能夠是陣列在記憶體空間中的首地址位置 建議樓主可以建立全域性陣列,這樣就可以在區域性函式中修改陣列的值了 有不懂...

C 陣列做引數為什麼一定要傳遞陣列長度

千鋒教育 因為怕引起陣列越界,當陣列傳入一個函式後,就會用迴圈來處理。比如下面的例子很好地說明了這個問題 include iostream.h int max int a,int size size是陣列的大小 int main cout max a i return max 執行結果 98 想不出...

為什麼混凝土基礎中的鋼筋可以作為接地體

首先要否定下面這個說法 鋼筋 和土壤接觸增大錨固力,接地 更好 接地體是為防雷服務的,不是為了增加錨固。這個說法有道理 鋼筋是導體,混凝土含有矽酸鹽導電能力較好,能較好地連線到大地,這是一種經濟實用的接地方案,但也要注意一些問題 1.要通過實測接地電阻,不能達到標準的話要增加部分接地電極,達到要求為...