c語言中不可以用變量定義數(shù)組的個數(shù)。
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,山西企業(yè)網(wǎng)站建設,山西品牌網(wǎng)站建設,網(wǎng)站定制,山西網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,山西網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
可以使用mallo函數(shù)
mallo函數(shù)返回的實際是一個無類型指針,必須在其前面加上指針類型強制轉換才可以使用;
指針自身=(指針類型*)malloc(sizeof(指針類型)*數(shù)據(jù)數(shù)量);
int*p=NULL;
intn=10;
p=(int*)malloc(sizeof(int)*n);
擴展資料
mallo函數(shù)使用注意事項
調用malloc函數(shù)時,它沿連接表尋找一個大到足以滿足用戶請求所需要的內存塊。然后,將該內存塊一分為二(一塊的大小與用戶請求的大小相等,另一塊的大小就是剩下的字節(jié))。接下來,將分配給用戶的那塊內存?zhèn)鹘o用戶,并將剩下的那塊(如果有的話)返回到連接表上。
調用free函數(shù)時,它將用戶釋放的內存塊連接到空閑鏈上。到最后,空閑鏈會被切成很多的小內存片段,如果這時用戶申請一個大的內存片段,那么空閑鏈上可能沒有可以滿足用戶要求的片段了。
方法
有2
將該數(shù)組定義為全局變量,即:
int
g_arr;
void
fun()
{...}
void
main()
{...}
2.將該數(shù)組作為函數(shù)參數(shù)傳遞到自定義函數(shù)里,即:
void
fun(int
arr[])
{...}
void
main()
{
int
arr[10];
fun(arr);
}
我覺得你在看引用調用和值調用那一部分。
首先,其實對于int
a[10],就是在內存中開辟一段存儲空間存放十個整型元素。你要明白a不是一個變量,而是一個常量地址,什么地址呢?就是指向這10個元素空間的首地址(第一個元素的地址)。你可以給a賦個值試一試,編譯不會通過,因為a是個常量,不是變量。
而對于變量,他就是代表一個值,可以對他進行任意賦值。
如果將數(shù)組傳遞給函數(shù),因為數(shù)組名a是常量地址,所以函數(shù)形參有了主函數(shù)數(shù)組的地址,所以被調函數(shù)可以通過地址,修改主函數(shù)中數(shù)組的元素值。
明白嗎?
void min(int a[],int x) //int x是用來標記傳過來的數(shù)組的長度(即a數(shù)組指向的那個數(shù)組的長度)。
因為你在函數(shù)中計算的時候,a只能當做一個指針來用,沒有具體的長度,而且你是int 型的,所以沒有標準庫函數(shù)來求你需要計算的數(shù)組的長度,所以你就沒法計算。
void min(int a[],int b[])這樣計算沒錯誤,但是在計算的時候,你要知道a所指向的數(shù)組的長度和b所指向的長度,例如下面的例子:
a數(shù)組中有10個數(shù),b數(shù)組中有2個數(shù),a數(shù)組的大小是40個字節(jié),而指向他的c數(shù)組大小只有4個字節(jié),所以當你運算的時候,你要知道c指向的a數(shù)組的大小,同理,d也是一樣。
#include"stdio.h"
#include"string.h"
void min(int c[],int d[])
{
int i,j=0;
int e[100]={0};
printf("c=%d\n",sizeof(c));
for(i=0;i10;i++)?//a數(shù)組中有10個數(shù)
e[j++]=c[i];
for(i=0;i2;i++)?//b數(shù)組中有2個數(shù)
e[j++]=d[i];
for(i=0;e[i];i++)
printf("%d\t",e[i]);
}
main()
{
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[2]={3,4};
printf("a=%d\n",sizeof(a));
min(a,b);
}
來傳送子函數(shù)中的數(shù)組有多種方法——可以通過函數(shù)返回值返回地址傳遞數(shù)組;也可以通過函數(shù)輸入?yún)?shù)來傳遞數(shù)組;還可以通過全局變量來傳遞數(shù)組。
子函數(shù)本身可以直接在作用域中進行調用。
1、通過函數(shù)返回值返回地址傳遞數(shù)組。
聲明函數(shù)時需要聲明函數(shù)返回值類型為對應數(shù)組的地址,此時可以返回數(shù)組的地址,結合數(shù)組元素的地址關系可以傳遞整個數(shù)組,同時可以根據(jù)數(shù)組的特性傳遞多個參數(shù)。
2、通過輸入?yún)?shù)傳遞數(shù)組。
聲明函數(shù)時提供空輸入?yún)?shù),調用函數(shù)時提供目標數(shù)組,即可以通過該數(shù)組調用子函數(shù)中的數(shù)組,該方法也可以用于傳遞多個參數(shù)。
3、通過全局變量來傳遞數(shù)組。
聲明全局變量用于存儲子函數(shù)中的數(shù)組,此時可以在全局變量作用域中讀取調用子函數(shù)的數(shù)組。
注意:子函數(shù)是C語言模塊化編程思想的核心,其方法是通過輸入接口和輸出接口實現(xiàn)對黑盒的調用,故對其內部數(shù)據(jù)的輸入和調用也需要通過輸入接口、輸出接口和程序的公共區(qū)域實現(xiàn)。
函數(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ù)指針”本身首先應是指針變量,只不過該指針變量指向函數(shù)。這正如用指針變量可指向整型變量、字符型、數(shù)組一樣,這里是指向函數(shù)。
C在編譯時,每一個函數(shù)都有一個入口地址,該入口地址就是函數(shù)指針所指向的地址。有了指向函數(shù)的指針變量后,可用該指針變量調用函數(shù)。
擴展資料:
指針函數(shù)和函數(shù)指針的區(qū)別:
這兩個概念都是簡稱,指針函數(shù)是指返回值是指針的函數(shù),即本質是一個函數(shù)。我們知道函數(shù)都有返回類型(如果不返回值,則為無值型),只不過指針函數(shù)返回類型是某一類型的指針。其定義格式如下所示:返回類型標識符*函數(shù)名稱。
返回類型可以是任何基本類型和復合類型。返回指針的函數(shù)的用途十分廣泛。事實上,每一個函數(shù),即使它不帶有返回某種類型的指針,它本身都有一個入口地址,該地址相當于一個指針。比如函數(shù)返回一個整型值,實際上也相當于返回一個指針變量的值,不過這時的變量是函數(shù)本身而已,而整個函數(shù)相當于一個“變量”。
參考資料:百度百科 -?函數(shù)指針