c語言傳入數組
① 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;
}
② c語言函數怎麼傳數組
C和C++都沒有辦法傳數組,只能傳「指針」,指針和數組的差別就在於函數內無法檢測數組的尺寸
③ C語言如何輸入一個數組
1、輸入數組需要使用指針獲取地址後,就能對得到的數組就行操作了。首先打開DEV C++軟體,新建一個空白的C語言文件:
④ 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語言中、數組在函數中的傳遞可以數組元素的傳遞!還有就是數組名的傳遞!其實、數組名的傳遞類似指針!就是把數組的元素的首地址傳到形參的!
⑥ C語言自定義函數怎麼傳參,一次性把數組的數據全部傳入
數組參數屬於指針參數.
指針參數即時傳址參數(或叫引用參數), 如果想在函數中修改參數的值, 這是唯一的途徑.
如果把數組當作參數, 不管你願意與否, 它就是指針, 指向第一個值的指針.
1. 數組參數就是指向第一個元素的指針: #include <stdio.h>
void getArr(int p[], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int p[], int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}
2. 乾脆直接聲明為指針: #include <stdio.h>
void getArr(int *p, int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int *p, int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}
3. 即使你在形參中指定維數也不起作用: #include <stdio.h>
void getArr(int p[2], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
getArr(ns, sizeof(ns)/sizeof(ns[0]));
getchar();
return 0;
}
void getArr(int p[2], int si) {
int i;
for (i = 0; i < si; i++) {
printf("%d\n", p[i]);
}
}
4. 既然是指針, 其值就有被修改的可能: #include <stdio.h>
void getArr(int p[], int si);
int main(void)
{
int ns[] = {1,2,3,4,5};
size_t i;
getArr(ns, sizeof(ns)/sizeof(ns[0]));
for (i = 0; i < sizeof(ns)/sizeof(ns[0]); i++) {
printf("%d\n", *(ns+i));
}
getchar();
return 0;
}
void getArr(int p[], int si) {
int i;
for (i = 0; i < si; i++) {
p[i]++;
}
}
5. 如果是字元數組, 它自己能判斷數組尾界: #include <stdio.h>
void getArr(char p[]);
int main(void)
{
char ns[] = "ABCDEFG";
getArr(ns);
getchar();
return 0;
}
void getArr(char p[]) {
int i;
for (i = 0; p[i]; i++) {
printf("%c: %d\n", p[i], p[i]);
}
}