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.要通過實測接地電阻,不能達到標準的話要增加部分接地電極,達到要求為...