我覺得你在看引用調用和值調用那一部分。
創(chuàng)新互聯建站致力于互聯網品牌建設與網絡營銷,包括網站建設、網站制作、SEO優(yōu)化、網絡推廣、整站優(yōu)化營銷策劃推廣、電子商務、移動互聯網營銷等。創(chuàng)新互聯建站為不同類型的客戶提供良好的互聯網應用定制及解決方案,創(chuàng)新互聯建站核心團隊十余年專注互聯網開發(fā),積累了豐富的網站經驗,為廣大企業(yè)客戶提供一站式企業(yè)網站建設服務,在網站建設行業(yè)內樹立了良好口碑。
首先,其實對于int
a[10],就是在內存中開辟一段存儲空間存放十個整型元素。你要明白a不是一個變量,而是一個常量地址,什么地址呢?就是指向這10個元素空間的首地址(第一個元素的地址)。你可以給a賦個值試一試,編譯不會通過,因為a是個常量,不是變量。
而對于變量,他就是代表一個值,可以對他進行任意賦值。
如果將數組傳遞給函數,因為數組名a是常量地址,所以函數形參有了主函數數組的地址,所以被調函數可以通過地址,修改主函數中數組的元素值。
明白嗎?
//你看看是不是要這樣的效果
#includevector
#include"stdio.h"
//子函數
float yourFunction(float number)
{
return number+5;
}
int main()
{
//個人推薦使用容器代替動態(tài)指針數組,代碼更安全 簡單;
std::vectorfloatarray;
//循環(huán)時將函數返回的值放到vector中
for(int i=0;i10;i++)
{
array.push_back(yourFunction(i));
}
//獲取數組中的值
for(int i=0;iarray.size();i++)
{
printf("\n%f",array[i]);
}
getchar();
}
方法
有2
將該數組定義為全局變量,即:
int
g_arr;
void
fun()
{...}
void
main()
{...}
2.將該數組作為函數參數傳遞到自定義函數里,即:
void
fun(int
arr[])
{...}
void
main()
{
int
arr[10];
fun(arr);
}
一、數組可定義為全局變量,函數直接調用。
二、數組可定義為局部變量,再通過參數傳遞到函數中調用(實參傳數組名,表示數組首地址,也可通過指針或數組名+數字來傳遞數組局部地址)。
三、main函數想要調用函數返回的數組,可用static定義靜態(tài)變量或malloc定義動態(tài)數組(字符串常量也可返回使用,但局部變量,在函數調用結束會被釋放,不能作為返回地址使用)。
下面是演示代碼:
#include stdio.h
#include string.h
#include malloc.h
char str1[]="我是全局變量數組";
char *fun0(char str2[]);
char *fun1();
char *fun2();
int main()
{
char *str3=NULL,*str4=NULL,*str5=NULL;
char str2[]="我是main函數的局部數組變量";
str3=fun0(str2);
printf("str3:%s,fun函數調用結束,我的地址依然可以使用\n",str3);
str4=fun1();
printf("str4:%s,fun函數調用結束,我的地址依然可以使用\n",str4);
str5=fun2();
printf("str5:%s,fun函數調用結束,函數結束不會自動釋放\n",str5);
free(str5);
return 0;
}
char *fun0(char s[])
{
static char str3[]="我是fun函數申明的靜態(tài)數組變量";
printf("str1:%s,fun函數可以直接調用\n",str1);
printf("str2:%s,fun函數通過參數將我的地址傳進來\n",s);
return str3;
}
char *fun1()
{
char *str4="我是fun1函數的字符串常量";
return str4;
}
char *fun2()
{
int len;
char sTemp[]="這是一個臨時數組,之后用于給mallc申請的地址傳值,傳遞內容為:(我是fun函數通過mallic申請的數組)";
char *str5=NULL;
len=strlen(sTemp+63);
str5=(char *)malloc(sizeof(char)*len+1);
if(!str5)return NULL;
strcpy(str5,sTemp+63);
str5[len-2]=0;
return str5;
}
將數組傳遞給函數后,數組就會退化為指針
void?fun(int?x,?int?pp[],?int?*n)
void?fun(int?x,?int?*pp,?int?*n)
//?這兩種寫法是等價的
pp[j++]=j;?//?這句寫錯了
//?要保存到pp里的是能整除的整數,而不是計數器j,如果這么寫,那么pp的值肯定是{0,1,2,3,4,5,...}
//?應該改成
pp[j++]?=?l;?//?L才是被整除的整數,要保存的是這個
*n=j;?//?n作為一個指針,負責傳出得到的數字的數量,j是計數器,當所有的計算完畢后,j的值自然是這些數字的數量