c語言函數傳遞數組
『壹』 c語言函數怎麼傳數組
C和C++都沒有辦法傳數組,只能傳「指針」,指針和數組的差別就在於函數內無法檢測數組的尺寸
『貳』 c語言函數傳數組問題
第二張圖:函數聲明是可以不加n的,下面的是直接寫a[]是因為有初始化,n的值即為裡面初始化的參數個數。
第三張圖:函數裡面沒有定義局部的n,就需要傳參數進去,因為C語言一般情況下是不支持a[n],如果n未知。
『叄』 c語言數組在函數中的傳遞
c語言中、數組在函數中的傳遞可以數組元素的傳遞!還有就是數組名的傳遞!其實、數組名的傳遞類似指針!就是把數組的元素的首地址傳到形參的!
『肆』 C語言 主函數傳遞數組給子函數
你的
代碼
不全,我只能給你分析一下這種情況常見的錯誤了。
1、要返回
數組
定義
在子
函數
中。在函數體內部定義的數據
變數
,如果未加修飾符(static和extern),那麼她是局部的,函數執行完畢之後
內存
釋放,造成你訪問
錯誤
。你
下邊
的那個例子定義的數組是
全局變數
,先不說了下班了晚上補充
『伍』 c語言怎麼將數組作為函數參數傳入
一維數組的元素作為函數實參,與同類型的簡單變數作為實參一樣,是單向的值傳遞,即數組元素的值傳給形參,從而形參是改變不影響實參
數組名代表著整個數組的地址,如果一維數組的名字作為函數實參,傳遞的是整個數組,即形參數組和實參數組完全相同,是存放在同一存儲空間的同一個數組。這樣形參數組
修改時,實參數組也同時被修改了。形參數組的元素個數可以省略。
#include<stdio.h>
//數組作為函數參數,可以省略元素個數
//數組作為函數參數,傳遞是整個數組的地址,修改了函數形參數組元素的值,會影響到外面的實參數組
void change(int array[])
{
printf("array ==%p\n",array);
array[0] = 100;
}
int main()
{
int ages[6] = {10,11,13,15,11,18};
printf("array ==%p\n",ages);
change(ages);
printf("%d\n",ages[0]);
return 0;
}
輸出結果為: array ==0x7fff5be26c00
array ==0x7fff5be26c00
100
『陸』 C語言中如何將二維數組作為函數的參數傳遞
在C語言中可以用二維數組作為實參或者形參。
1、函數中用二維數組作為形參,函數聲明中可以指定所有維數的大小,也可以省略第1維的維數如:
voidf(intarray[3][10]);//正確
voidf(intarray[][10]);//正確
上面的兩種二維數組形參表示都是正確的。
2、函數中用二維數組作為形參,不能把第2維或者更高維的大小省略,如下面的定義是不合法的:
voidf(intarray[][]);//錯誤
因為從實參傳遞來的是數組的起始地址,在內存中按數組排列規則存放(按行存放),而並不區分行和列,如果在形參中不說明列數,則系統無法決定應為多少行多少列,不能只指定一維而不指定第二維,下面寫法是錯誤的:
voidf(intarray[3][]);//錯誤
3、二維數組作為實參傳遞時,必須保證實參第2維的維數與形參第2維的維數相同,因為必須要保證形參和實參的數據類型一致。比如定義如下函數:
voidf(intarray[][10]);
可以將如下數組傳遞給函數f。
inta[2][10]={1,2,3,4};
intb[4][10]={1};
『柒』 在C語言中,數組作為參數,是怎樣在函數之間傳遞的啊
數組作為參數是按地址傳遞的
數組名就是數組的首地址。因此在數組名作函數參數時所進行的傳送只是地址的傳送, 也就是說把實參數組的首地址賦予形參數組名。形參數組名取得該首地址之後,也就等於有了實在的數組。實際上是形參數組和實參數組為同一數組,共同擁有一段內存空間。
『捌』 在C語言中,數組作為參數,是怎樣在函數之間傳遞
很簡單的,數組作為函數參數傳遞的時候只要是數組名就可以了,因為數組名本身就是數組的首地址 .給個程序看看
#include<stdio.h>
#define N 3
int array[N][N];
void main()
{
//在主函數內聲明被調函數
void convert(int array[][3]);
int i,j;
printf("輸入數組:\n");
for(j=0;j<N;j++)
for(i=0;i<N;i++)
scanf("%d",&array[i][j]);
printf("\n");
for(j=0;j<N;j++)
{
for(i=0;i<N;i++)
printf("%d\t",array[i][j]);
printf("\n");
}
//調用矩陣轉置函數
convert(array);
printf("\n");
for(i=0;i<N;i++)
{
for(j=0;j<N;j++)
printf("%d\t",array[i][j]);
printf("\n");
}
}
void convert(int array[][3])
{
int i,j,t;
for(i=0;i<N;i++)
for(j=0;j<N;j++)//設置數組中轉置矩陣元素交換
{
t=array[i][j];
array[i][j]=array[j][i];
array[j][i]=t;
}
}
『玖』 請問在C語言中,函數傳參時怎樣利用指針傳遞數組
數組名就是指針,例如:
#include <stdio.h>
voidpr(char *p)
{
printf(p);
}
void main(void)
{
char s[] = "abc";
pr(s);
}
(9)c語言函數傳遞數組擴展閱讀:
注意事項
非數組類的聲明盡量以指針的方式進行比較好。倘若一個指針指向的內存並不是一個數組,那麼採用數組名的聲明方式或許就會給人產生錯誤的引導。類似的,如果指向的是一個數組區域,則會給人以更加豐富的信息。例如:
int main(int argc,char* argv[])
{
/* code here */
}
與
int main(int argc,char** argv)
{
/* code here */
}
兩種方式完全等價,但是前面一種能夠更清晰地看出:這個參數是指向某個元素起始地址的指針,而後面的這種方式則不能夠直觀地看出這種含義。
『拾』 C語言怎麼向自定義函數中傳入一個數組,處理完再返回新的數組
看你的代碼。
你問題並不在數組傳入。你函數mymd5接收password數組,mymd5的password數組變數和外部函數的password地址相同,所以改變其中外部函數的數組也改變。
但你mymd5返回的數組decrypt,是局部變數,當mymd5調用結束,這個數組的內存空間就釋放了。你接收了也是NULL。所以要用malloc或calloc申請動態內存。這樣不會被釋放。
我寫了簡單案例,你參考:
#include<stdio.h>
#include<malloc.h>
#include<string.h>
char*md(chara[]);//錯誤的數組返回
char*md2(chara[]);//正確的數組返回
intmain()
{
charpassword[10]="123456789",*decrypt=NULL;
decrypt=md(password);
printf("外部函數傳遞數組到子函數,子函數改變,外部函數也改變,password=%s
",password);
printf("錯誤返回方式:局部變數,外部函數接收失敗,被自動釋放,decrypt=%s
",decrypt);
decrypt=md2(password);
printf("正確返回方式:動態申請,外部函數接收成功,不會被自動釋放,decrypt=%s
",decrypt);
return0;
}
char*md(charpassword[])
{
chardecrypt[10]="*********";
password[0]=0,strcpy(password,"abcdefghi");
returndecrypt;
}
char*md2(charpassword[])
{
char*decrypt=(char*)malloc(sizeof(char)*10);
if(!decrypt)
returnNULL;
strcpy(decrypt,"*********");
password[0]=0,strcpy(password,"abcdefghi");
returndecrypt;
}