如果是非靜態(tài)的局部變量,那第二次調(diào)用時(shí),數(shù)組會(huì)被 ”清空“。
創(chuàng)新互聯(lián)成立于2013年,我們提供高端網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、網(wǎng)站定制、網(wǎng)絡(luò)營(yíng)銷推廣、成都小程序開發(fā)、微信公眾號(hào)開發(fā)、seo優(yōu)化排名服務(wù),提供專業(yè)營(yíng)銷思路、內(nèi)容策劃、視覺設(shè)計(jì)、程序開發(fā)來完成項(xiàng)目落地,為砂巖浮雕企業(yè)提供源源不斷的流量和訂單咨詢。
子函數(shù)中,聲明的非靜態(tài)局部變量、數(shù)組,使用的是函數(shù)??臻g。
在每次調(diào)用函數(shù)時(shí),都會(huì)新分配一塊兒棧空間給函數(shù)使用。
因此相當(dāng)于每次調(diào)用子函數(shù),子函數(shù)內(nèi)的局部變量都會(huì)被初始化~
C語(yǔ)言中,同變量一樣;數(shù)組也必須先定義后使用。
一維數(shù)組的定義形式:
類型標(biāo)識(shí)符? 數(shù)組名[常量表達(dá)式];例如int a[10]; ? 其中a為地址常量。
如變量的定義一樣,int a ;double a;float a等;數(shù)組的定義只是把后面的變量名改為數(shù)組名而已。
int a[10]就是定義了一個(gè)數(shù)組名為a的數(shù)組;此數(shù)組有10個(gè)元素。其中各元素從a[0]到a[9];并沒有a[10]元素。下面列舉一個(gè)。
擴(kuò)展資料
常量表達(dá)式可以包括字面常量和符號(hào)常量;但不能包含變量。例如對(duì)下面定義是錯(cuò)誤的
int n=5
int a[n]
可以修改為
#define N 5
int a[N]
其中對(duì)二維及多位數(shù)組定義可以類推
int? a[x][y][z][...]其中 x,y,z為數(shù)字。
參考資料
百度百科-C語(yǔ)言
函數(shù)不可以定義為數(shù)組,可以用函數(shù)指針來操作。
1.函數(shù)指針的數(shù)組定義方法:返回值類型( * 指針變量名[Number]) (形參列表)。
例如:
double add(double a,double b){}
double sub(double a,double b){}
double mul(double a,double b){}
double div1(double a,double b){}
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函數(shù)指針的數(shù)組定義。
2.函數(shù)指針是指向函數(shù)的指針變量。 因而“函數(shù)指針”本身首先應(yīng)是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
C在編譯時(shí),每一個(gè)函數(shù)都有一個(gè)入口地址,該入口地址就是函數(shù)指針?biāo)赶虻牡刂?。有了指向函?shù)的指針變量后,可用該指針變量調(diào)用函數(shù)。
擴(kuò)展資料:
指針函數(shù)和函數(shù)指針的區(qū)別:
這兩個(gè)概念都是簡(jiǎn)稱,指針函數(shù)是指返回值是指針的函數(shù),即本質(zhì)是一個(gè)函數(shù)。我們知道函數(shù)都有返回類型(如果不返回值,則為無值型),只不過指針函數(shù)返回類型是某一類型的指針。其定義格式如下所示:返回類型標(biāo)識(shí)符*函數(shù)名稱。
返回類型可以是任何基本類型和復(fù)合類型。返回指針的函數(shù)的用途十分廣泛。事實(shí)上,每一個(gè)函數(shù),即使它不帶有返回某種類型的指針,它本身都有一個(gè)入口地址,該地址相當(dāng)于一個(gè)指針。比如函數(shù)返回一個(gè)整型值,實(shí)際上也相當(dāng)于返回一個(gè)指針變量的值,不過這時(shí)的變量是函數(shù)本身而已,而整個(gè)函數(shù)相當(dāng)于一個(gè)“變量”。
參考資料:百度百科 -?函數(shù)指針
在子函數(shù)申請(qǐng)二維數(shù)組,主函數(shù)使用,可以用動(dòng)態(tài)申請(qǐng)。
方法不止一種,我這里用指針的指針實(shí)現(xiàn)二維數(shù)組。
二維數(shù)組除了行列,本身地址也是連續(xù)的,從第一行第一列的元素地址++,可以取出所有元素。所以我這里先申請(qǐng)了完整的連續(xù)地址。
#includestdio.h
#includemalloc.h
int?**?sr(void)
{
int?i,j;
int?*memory=(int?*)malloc(sizeof(int)*9);//申請(qǐng)完整的連續(xù)內(nèi)存地址3*3
int?**arr=(int?**)malloc(sizeof(int*)*3);//申請(qǐng)二維數(shù)組行指針數(shù)組(也就是二維數(shù)組)
if(!memory?||?!arr){
printf("內(nèi)存申請(qǐng)錯(cuò)誤!\n");return?NULL;}
for(i=0,j=0;i9;i+=3)//將連續(xù)地址按列數(shù),取出每行首地址,賦值給二維數(shù)組元素
arr[j++]=memory[i];
for(i=0;i3;i++)
for(j=0;j3;j++)
scanf("%d",arr[i][j]);
return?arr;
}
int?main(void)
{
int?i,j,**arr=sr();
if(!arr)
return?1;
printf("---主函數(shù)調(diào)用子函數(shù)定義的二維數(shù)組---\n");
for(i=0;i3;i++,printf("\n"))
for(j=0;j3;j++)
printf("%d?",arr[i][j]);
printf("\n---實(shí)現(xiàn)二維數(shù)組地址連續(xù)性---\n");
int?*p=arr[0][0];
while(p=arr[2][2])
printf("%d?",*p++);
return?0;
}