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樓:匿名使用者
ps: 原創,針對問題回答問題而已
你這個問題就是想知道如何將陣列資料傳遞到子函式中去!
#include
void prt_arrary( int *a, int n ) //傳遞陣列首地址,和陣列元素個數
{int i=0;
for( i=0;i
3樓:匿名使用者
1、因為陣列在記憶體中是一塊連續的記憶體,只要將該陣列的首地址傳進去,當然就可以訪問整個陣列了。值得注意的是,由於只傳了首地址,函式不知道陣列的維數,所以還得把陣列的維數傳進去,那就可以完全操作該陣列了。
2、例:有一個函式宣告:void fun( int aa,int size );或者void fun( int *pa,int size );
以上兩種宣告都一樣。
呼叫上訴函式時:假設有 int ab[10];
fun( ab,10 )就可以了。
4樓:匿名使用者
#include void print(int a, int len)int main(); print(a, 9); return 1;}
c語言怎麼向自定義函式中傳入一個陣列,處理完再返回新的陣列?
5樓:
//你**中定義的mymd5函式,你想返回decrypt陣列的首地址來獲取字串是無法實現的
//因為decrypt陣列是區域性變數,mymd5()函式返回後,這個陣列的記憶體空間也隨之被釋放
//了,但是可以通過向函式傳遞地址的方式來獲取加密後的字串,將其存放在字元陣列當中。
void mymd5(unsigned char *password, unsigned char *decrypt)
//定義字元陣列的同時進行置0初始化是編碼的一個好習慣
unsigned char password[20]=
unsigned char decrypt[16]=
...//呼叫函式
mymd5(password, decrypt);
6樓:
把陣列定義在主調函式中,把陣列的首地址(指標)傳給自定義函式,在函式中通過指標來操作主調函式中的陣列,結果自然就在主調函式中定義的陣列中。c沒有提供把陣列傳給函式再由函式傳回來的功能。只能上述那樣操作。
但可以間接達到你的目的,那就是把陣列安排在結構體中,結構體變數是可以在主調函式和被調函式間來回值傳遞的,自定義函式就得用結構體型別形式引數。
7樓:自我程式設計
看你的**。
你問題並不在陣列傳入。你函式mymd5接收password陣列,mymd5的password陣列變數和外部函式的password地址相同,所以改變其中外部函式的陣列也改變。
但你mymd5返回的陣列decrypt,是區域性變數,當mymd5呼叫結束,這個陣列的記憶體空間就釋放了。你接收了也是null。所以要用malloc或calloc申請動態記憶體。
這樣不會被釋放。
我寫了簡單案例,你參考:
#include
#include
#include
char *md(char a);//錯誤的陣列返回char *md2(char a);//正確的陣列返回int main()
char *md(char password)char *md2(char password)
c語言技巧:怎樣把陣列作為引數傳遞給函式
8樓:匿名使用者
使用pointer(指標)即可.
ex:void func(int *ptr, int len);
int array[10];
test()
c語言中,陣列做函式引數如何才能按值傳遞?
9樓:匿名使用者
傳陣列給一
bai個函式,數du組型別自動轉換zhi
為指標型別dao,因而傳的實際是專地址。
void func(int array[10])void func(int array)
void func(int *array)所以以上三種函
屬數宣告完全等同。
實際情況是,陣列做引數,完全無法按值傳遞。這是由c/c++函式的實現機制決定的。
下一個問題是:為什麼偏要按值傳遞呢?當要在一個函式內使用一個陣列時,傳一個指標進去不就行了?只要能訪問到我們所要的資料並對其進行操作,何苦鑽牛角尖。
10樓:一枝梅不落
陣列其實就是指標的退化,陣列名其實就是一個指標。就直接按指標做函式的引數就好,然後將陣列名傳遞進去給函式就行!在函式中對其的訪問也是和陣列的操作類似!具體的可以看一下書!
11樓:匿名使用者
1、陣列做引數,完全無法按值傳遞。這是由c/c++函式的實現機制決定的。回
2、傳陣列答給一個函式,陣列型別自動轉換為指標型別,因而傳的實際是地址。
下面三種函式宣告完全等同:
void func(int array[10])void func(int array)
void func(int *array)
12樓:南坪中學校帥
不可能按值傳遞的,設想一下
type *arr =。。。。。
sizeof(arr)為100萬了位元組,如果按照值傳遞,就要建立版一個臨時變權量temp也為100萬個位元組,效率豈不是太低了。再可能arr是堆記憶體,引數傳遞是要屬性相同,值相同,難道系統自行去new一段記憶體,這該使用者去釋放 還是系統自動**呢?
13樓:林夕之韻
陣列給一個函式,常用的是可把陣列的首地址傳給函式。
即相當於是指標的應用
fun(int array[10])
fun(int array)
fun(int *array)
三種呼叫方法
14樓:匿名使用者
傳陣列給一個函抄數,陣列型別自動轉換為指標型別,因而傳的實際是地址。
void func(int array[10])void func(int array)
void func(int *array)所以以上三種函式宣告完全等同。
實際情況是,陣列做引數,完全無法按值傳遞。這是由c/c++函式的實現機制決定的。
下一個問題是:為什麼偏要按值傳遞呢?當要在一個函式內使用一個陣列時,傳一個指標進去不就行了?只要能訪問到我們所要的資料並對其進行操作,何苦鑽牛角尖。
c語言自定義函式怎麼傳參,是一次性把陣列的資料全部傳入嗎?
15樓:匿名使用者
1、因為陣列在記憶體來中源
是一塊連續的記憶體,只要將該陣列的首地址傳進去,當然就可以訪問整個陣列了。值得注意的是,由於只傳了首地址,函式不知道陣列的維數,所以還得把陣列的維數傳進去,那就可以完全操作該陣列了。
2、例:有一個函式宣告:void fun( int aa,int size );或者void fun( int *pa,int size );
以上兩種宣告都一樣。
呼叫上訴函式時:假設有 int ab[10];
fun( ab,10 )就可以了。
請問在c語言中,函式傳參時怎樣利用指標傳遞陣列
16樓:大野瘦子
陣列名就是指標,例如:
#include
void pr(char *p)
printf(p);
void main(void)
char s = "abc";
pr(s);
17樓:樹桖珍
比如函式需要一個整型陣列:
void ex(int a)
或者可以寫成:
void ex(int *a)
效果是一樣的。
使用的時候:
引用陣列中的第2個元素(即下標為1的元素)a[1]
或者*(a+1)
基本上與陣列的正常使用沒有區別。
c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。
儘管c語言提供了許多低階處理的功能,但仍然保持著良好跨平臺的特性,以一個標準規格寫出的c語言程式可在許多電腦平臺上進行編譯,甚至包含一些嵌入式處理器(微控制器或稱mcu)以及超級電腦等作業平臺。
18樓:匿名使用者
宣告:int arr(int a);<=>int arr(int *a);(計算機會把前者也翻譯成後者處理,效果等價)
陣列名就是指標
int a[5]=;
引用時:
arrey=arr(a);
其實形參是一個指向該陣列的指標,而陣列只有一個,指向即操作返回陣列值我不知道你想問什麼
19樓:匿名使用者
直接上例子:
比如函式需要一個整型陣列:
void ex(int a)
或者可以寫成:
void ex(int *a)
效果是一樣的。
使用的時候:
引用陣列中的第2個元素(即下標為1的元素)a[1]
或者*(a+1)
基本上與陣列的正常使用沒有區別。
(但要注意 由於呼叫函式時只傳遞了指標(首地址) 所以程式不會做超界檢查)
你在子函式中進行的更改會直接影響到原陣列的內容這也就意味著 只要你在處理函式中更改了資料 那麼任何函式(包括原函式)訪問這個陣列時 都使用的是你更改以後的數值
自定義函式
一般先進bai行函式宣告,du然後定義,如int add int a,int b 函式宣告zhiint add int a,int b 函式定義,dao我這裡定義了 版一個加法函式。函式功能是權實現兩個數相加 void main 這裡只是舉個例子,當然你還可以自定義各種各樣的函式,還有就是 定義函式...
c語言自定義函式中,怎樣返回多個數值呢??好像return不
採用陣列呀!如rrturn a n 要返回的n個值放在a n 設定全域性變數,用陣列名作為形參,利用指標變數,引用引數 可以用全域性變數,或者把要修改的值的指標作為該函式的形參。int a 0 全域性變數 void fun int x main void 函式執行到第一個return就返回了。你可以...
C語言 呼叫自定義交換函式,完成浮點數從小到大排列
正如樓上所說,這個方法是很多的。我舉一個例子 include void swap double x,double y 定義交換函式 main for i 0 i 3 i 氣泡排序for j 0 j 3 i j if st j st j 1 swap st j st j 1 for i 0 i 5 i...