1樓:匿名使用者
陣列只能通過指標傳遞,不能通過值傳遞。
陣列引數屬於指標引數,指標引數即時傳址引數(或叫引用引數), 如果想在函式中修改引數的值, 這是唯一的途徑.
如果把陣列當作引數, 不管願意與否, 它就是指標, 指向第乙個值的指標.
1. 陣列引數就是指向第乙個元素的指標: #include
void getarr(int p, int si);
int main(void)
;getarr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}void getarr(int p, int si)
}2. 乾脆直接宣告為指標: #include
void getarr(int *p, int si);
int main(void)
;getarr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}void getarr(int *p, int si)
}3. 即使你在形參中指定維數也不起作用: #include
void getarr(int p[2], int si);
int main(void)
;getarr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}void getarr(int p[2], int si)
}4. 既然是指標, 其值就有被修改的可能: #include
void getarr(int p, int si);
int main(void)
;size_t i;
getarr(ns, sizeof(ns)/sizeof(ns[0]));
for (i = 0; i < sizeof(ns)/sizeof(ns[0]); i++)
getchar();
return 0;
}void getarr(int p, int si)
}5. 如果是字元陣列, 它自己能判斷陣列尾界: #include
void getarr(char p);
int main(void)
void getarr(char p)}
2樓:西夏駙馬婹
c語言中、陣列在函式中的傳遞可以陣列元素的傳遞!還有就是陣列名的傳遞!其實、陣列名的傳遞類似指標!就是把陣列的元素的首位址傳到形參的!
c語言的陣列怎麼傳遞到函式裡面
3樓:匿名使用者
例:#include
void fact(int *p, int n)printf("\n");
p[3] = 6;
}int main()
;fact(a, 5);
for(i = 0; i < 5; ++i)printf("\n");
return 0;}
4樓:匿名使用者
把陣列首位址作為引數傳進去
5樓:匿名使用者
直接傳陣列名。如:
void f1(int arr)
int f2(int *p)
int a=;
f1(a);
f2(a);
6樓:匿名使用者
和相同型別的指標,相似的作用~~~~~
請問在c語言中,函式傳參時怎樣利用指標傳遞陣列
7樓:大野瘦子
陣列名就是指標,例如:
#include
void pr(char *p)
printf(p);
void main(void)
char s = "abc";
pr(s);
8樓:樹桖珍
比如函式需要乙個整型陣列:
void ex(int a)
或者可以寫成:
void ex(int *a)
效果是一樣的。
使用的時候:
引用陣列中的第2個元素(即下標為1的元素)a[1]
或者*(a+1)
基本上與陣列的正常使用沒有區別。
c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。
儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平台的特性,以乙個標準規格寫出的c語言程式可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平台。
9樓:匿名使用者
宣告:int arr(int a);<=>int arr(int *a);(計算機會把前者也翻譯成後者處理,效果等價)
陣列名就是指標
int a[5]=;
引用時:
arrey=arr(a);
其實形參是乙個指向該陣列的指標,而陣列只有乙個,指向即操作返回陣列值我不知道你想問什麼
10樓:匿名使用者
直接上例子:
比如函式需要乙個整型陣列:
void ex(int a)
或者可以寫成:
void ex(int *a)
效果是一樣的。
使用的時候:
引用陣列中的第2個元素(即下標為1的元素)a[1]
或者*(a+1)
基本上與陣列的正常使用沒有區別。
(但要注意 由於呼叫函式時只傳遞了指標(首位址) 所以程式不會做超界檢查)
你在子函式中進行的更改會直接影響到原陣列的內容這也就意味著 只要你在處理函式中更改了資料 那麼任何函式(包括原函式)訪問這個陣列時 都使用的是你更改以後的數值
11樓:匿名使用者
int *p;
int a[10];
p = a;
c語言中,陣列做函式引數如何才能按值傳遞?
12樓:匿名使用者
傳陣列給一
bai個函式,數du組型別自動轉換zhi
為指標型別dao,因而傳的實際是專位址。
void func(int array[10])void func(int array)
void func(int *array)所以以上三種函
屬數宣告完全等同。
實際情況是,陣列做引數,完全無法按值傳遞。這是由c/c++函式的實現機制決定的。
下乙個問題是:為什麼偏要按值傳遞呢?當要在乙個函式內使用乙個陣列時,傳乙個指標進去不就行了?只要能訪問到我們所要的資料並對其進行操作,何苦鑽牛角尖。
13樓:一枝梅不落
陣列其實就是指標的退化,陣列名其實就是乙個指標。就直接按指標做函式的引數就好,然後將陣列名傳遞進去給函式就行!在函式中對其的訪問也是和陣列的操作類似!具體的可以看一下書!
14樓:匿名使用者
1、陣列做引數,完全無法按值傳遞。這是由c/c++函式的實現機制決定的。回
2、傳陣列答給乙個函式,陣列型別自動轉換為指標型別,因而傳的實際是位址。
下面三種函式宣告完全等同:
void func(int array[10])void func(int array)
void func(int *array)
15樓:南坪中學校帥
不可能按值傳遞的,設想一下
type *arr =。。。。。
sizeof(arr)為100萬了位元組,如果按照值傳遞,就要建立版乙個臨時變權量temp也為100萬個位元組,效率豈不是太低了。再可能arr是堆記憶體,引數傳遞是要屬性相同,值相同,難道系統自行去new一段記憶體,這該使用者去釋放 還是系統自動**呢?
16樓:林夕之韻
陣列給乙個函式,常用的是可把陣列的首位址傳給函式。
即相當於是指標的應用
fun(int array[10])
fun(int array)
fun(int *array)
三種呼叫方法
17樓:匿名使用者
傳陣列給乙個函抄數,陣列型別自動轉換為指標型別,因而傳的實際是位址。
void func(int array[10])void func(int array)
void func(int *array)所以以上三種函式宣告完全等同。
實際情況是,陣列做引數,完全無法按值傳遞。這是由c/c++函式的實現機制決定的。
下乙個問題是:為什麼偏要按值傳遞呢?當要在乙個函式內使用乙個陣列時,傳乙個指標進去不就行了?只要能訪問到我們所要的資料並對其進行操作,何苦鑽牛角尖。
c語言中如何將二維陣列作為函式的引數傳遞
鄞臨婁溶溶 在c語言中可以用二維陣列作為實參或者形參。1 函式中用二維陣列作為形參,函式宣告中可以指定所有維數的大小,也可以省略第1維的維數如 void f int array 3 10 正確 void f int array 10 正確上面的兩種二維陣列形參表示都是正確的。2 函式中用二維陣列作為...
c語言如何在可變引數函式中使用,C語言如何在可變引數函式中使用printf
兔子和小強 如 psxf91所答,應使用v 系列的函式來實現。對比下printf與vprintf函式原型 void printf const char format,void vprintf const char format,va list ap 可以看出二者的差別。vprintf才接收va li...
說c語言中函式值傳遞與地址傳遞的方法
憤怒de翔小果 先舉個簡單例子 include using namespace std void add1 int a void add2 int a int main 輸出 2 5 這兩個自加函式中,add1是指標傳遞,add2是數值傳遞,在呼叫add2 y 時,系統是先建造一個int型變數a,再...