新聞中心
C語言可能會(huì)有這樣的一種錯(cuò)誤寫法在搭建動(dòng)態(tài)數(shù)組時(shí)

如圖所示
int size;
scanf_s("%d", &size);
int num[size] = {};
for (int i = 0; i< size; i++)
{
scanf_s("%d", num[i]);
}一旦進(jìn)行上述編寫編譯器會(huì)進(jìn)行報(bào)錯(cuò)


一.根據(jù)客戶需要生成長(zhǎng)度可變的動(dòng)態(tài)數(shù)組
C語言
1.函數(shù)malloc()
malloc函數(shù)用于分配若干字節(jié)的內(nèi)存空間,返回一個(gè)指向該內(nèi)存首地址(動(dòng)態(tài)數(shù)組)的指針
提示:若系統(tǒng)不能提供足夠的內(nèi)存單元,函數(shù)將返回NULL空指針
malloc函數(shù)的使用方法:
int* arr = NULL, size;
printf("一共有幾個(gè)數(shù):");
scanf_s("%d", &size);
arr = (int*)malloc(size * sizeof(int));提示:1.先定義一個(gè)指針變量?jī)?chǔ)存動(dòng)態(tài)數(shù)組的首地址
?2.(int*)是定義一個(gè)int類型的動(dòng)態(tài)數(shù)組
?3.malloc(size*sizeof(int))指申請(qǐng)了size個(gè)int類型字節(jié)的存儲(chǔ)空間,可根據(jù)需要進(jìn)行? ? ? ? ? ? ?改變例如將int改成float
2.calloc()函數(shù)
calloc函數(shù)用于分配若干字節(jié)的內(nèi)存空間,并賦值為零
函數(shù)原型
void*calloc(num,size);
calloc函數(shù)的使用方法:
int size;
scanf_s("%d", &size);
int* p = NULL;
p = (int*)calloc(size,sizeof(int));
if (p == NULL)
{
exit(1);
}提示:1.calloc不同于malloc函數(shù),calloc擁有兩個(gè)參數(shù),第一個(gè)size參數(shù)決定一維數(shù)組的大小,? ? ? ? ? ? ? ? 第二個(gè)參數(shù)表示申請(qǐng)每個(gè)空間的字節(jié)數(shù),確定數(shù)組元素的類型。
?2.從安全角度考慮使用calloc函數(shù)更明智因?yàn)榕cmalloc函數(shù)不同的是calloc函數(shù)能 自動(dòng)將? ? ? ? ? ? ? ? ? 分配的內(nèi)存初始化為0。
3.free()函數(shù)
free()函數(shù)的功能是釋放向系統(tǒng)動(dòng)態(tài)申請(qǐng)的由指針p指向的儲(chǔ)存空間
函數(shù)原型:free(*p)
動(dòng)態(tài)一維數(shù)組搭建實(shí)例:找出輸入所有數(shù)字中的正數(shù)
#include#include#define NULL 0
int PositiveNum(int a[], int n)
{
int count = 0;
for (int i = 0; i< n; i++)
{
int ag = a[i];
if (ag >0)
count++;
}
return count;
}
void fun(int* arr, int size)
{
for (int i = 0; i< size; i++)
scanf_s("%d", &arr[i]);
}
int main(void)
{
int* arr = NULL, size;
printf("請(qǐng)輸入一共有幾個(gè)數(shù):");
scanf_s("%d", &size);
arr = (int*)malloc(size * sizeof(int));//開辟申請(qǐng)空間
if (arr == NULL)
{
exit(1);
}
fun(arr, size);
printf("共有正數(shù)%d個(gè)", PositiveNum(arr, size));
free(arr);
return 0;
} 
4.realloc()函數(shù)
提示:realloc函數(shù)可用于改變?cè)瓉矸峙涞膬?chǔ)存空間的大小
指針名=(數(shù)據(jù)類型*)realloc(要改變內(nèi)存大小的指針名,新的大?。?/p>
int m, n;//班級(jí)數(shù)(行數(shù)),學(xué)生數(shù)(列數(shù))
printf("請(qǐng)輸入班級(jí)數(shù)和學(xué)生數(shù):\n");
scanf_s("%d,%d", &m, &n);
int* p = NULL;
p = (int*)calloc(m*n, sizeof(int));
int newsize;
printf("加幾個(gè)班");
scanf_s("%d", &newsize);
int *map=(int*)realloc(p, newsize);函數(shù)的返回值是新分配的存儲(chǔ)空間的首地址,與原來的地址不一定相同,所以要定義一個(gè)新的指針變量來儲(chǔ)存該數(shù)組的首地址。
二.長(zhǎng)度可變的二維動(dòng)態(tài)數(shù)組
二維動(dòng)態(tài)數(shù)組的搭建與一維動(dòng)態(tài)數(shù)組的搭建類似,下面舉一個(gè)例子
輸入班級(jí)數(shù)學(xué)生數(shù)并進(jìn)行計(jì)算總的平均分
#include#include//函數(shù)功能:輸入學(xué)生成績(jī)
void Input(int* p, int m, int n)
{
for (int x = 0; x< m; x++)
for (int y = 0; y< n; y++)
{
scanf_s("%d", &p[x * m + n]);
if (y == (n - 1))
{
printf("\n______________________\n");
}
}
}
//函數(shù)功能:求平均值
float aver(int* p, int m, int n)
{
float num=0.0;
for (int x = 0; x< m; x++)
for (int y = 0; y< n; y++)
{
num += (float)p[x * m + n];
}
return num / ((float)(m * n));
}
//二維動(dòng)態(tài)數(shù)組的搭建
int main(void)
{
int m, n;//班級(jí)數(shù)(行數(shù)),學(xué)生數(shù)(列數(shù))
printf("請(qǐng)輸入班級(jí)數(shù)和學(xué)生數(shù):\n");
scanf_s("%d,%d", &m, &n);
int* p = NULL;
p = (int*)calloc(m*n, sizeof(int));
if (p == NULL)
{
exit(1);
}
Input(p, m, n);
printf("兩個(gè)班所有學(xué)生的平均分是%f", aver(p, m, n));
return 0;
} 你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享名稱:C語言動(dòng)態(tài)數(shù)組搭建-創(chuàng)新互聯(lián)
文章來源:http://fisionsoft.com.cn/article/dgdhch.html


咨詢
建站咨詢
