c語言數組大小
A. c語言中結構體數組的大小如何動態分配
結構體類型數據組就和我們平常定義的基本類型的數組一樣,只不過是類型變了。
基本類型數組動態分配大小:
int* a = (int*)malloc(sizeof(int)*10) ; //動態分配10個大小的int類型的內存空間
結構體類型數組分配大小:
struct DIYDEFINE
{
int a;
char ch;
long lnum;
};
DIYDEFINE* pDiy = (DIYDEFINE*)malloc(sizeof(DIYDEFINE)*10); //動態分配10個大小的結構體類型DIYDEFINE的內存空間。
B. c語言數組的大小
若有說明:int a[][3]={1,2,3,4,5,6,7};則數組a第一維的大小是3。
int a[][]:第一個中括弧表示有此二維數組有幾行,第二個表示有幾列。
故int a[][3]={1,2,3,4,5,6,7};說明此數組有n行,3列;也就是說每行有三個元素,所以第一行有1,2,3 這三個元素,第二行有4,5,6三個元素,第三行有7這個元素,不足的兩個元素由0來補足。
對數組進行初始化,要麼兩個維度都不寫,由賦值的數組確定,或者第二維可以不寫,第一維要寫,再由賦值數組確定。
數組中的下標是從 0 開始的(而不是 1)。那麼,如何通過下標表示每個數組元素的呢?通過「數組名[下標]」的方式。例如「int a[5];」表示定義了有 5 個元素的數組 a,這 5 個元素分別為 a[0]、a[1]、a[2]、a[3]、a[4]。其中 a[0]、a[1]、a[2]、a[3]、a[4] 分別表示這 5 個元素的變數名。
如果從 1 開始,那麼數組的第 5 個元素就是 a[5],而定義數組時是 int a[5],兩個都是 a[5] 就容易產生混淆。而下標從 0 開始就不存在這個問題了!所以定義一個數組 a[n],那麼這個數組中元素最大的下標是 n–1;而元素 a[i] 表示數組 a 中第 i+1 個元素。
另外,方括弧中的常量表達式可以是「數字常量表達式」,也可以是「符號常量表達式」。但不管是什麼表達式,必須是常量,絕對不能是變數。
C 語言不允許對數組的長度進行動態定義,換句話說,數組的大小不依賴程序運行過程中變數的值。非通常的情況為動態內存分配,此種情況下數組的長度就可以動態定義。
(2)c語言數組大小擴展閱讀:
數組特點
1、數組是相同數據類型的元素的集合。
2、數組中的各元素的存儲是有先後順序的,它們在內存中按照這個先後順序連續存放在一起。
3、數組元素用整個數組的名字和它自己在數組中的順序位置來表示。例如,a[0]表示名字為a的數組中的第一個元素,a[1]代表數組a的第二個元素,以此類推。
C. 如何用C語言實現數組的大小比較功能
思路:
1 函數參數設計:數組首地址(指針),數組長度(int),最大值及最小值(兩個指針)。
2 以第一個數為最大/最小值。
3 遍歷其餘數,與最大/最小值比較,如果更大/小,則替換該值。
當遍歷結束,則得到最大及最小值。
代碼:
voidget_min_max(int*a,intl,int*min,int*max)
{
inti;
*min=*max=*a;
for(i=1;i<l;i++)
{
if(*min>a[i])*min=a[i];
if(*max<a[i])*max=a[i];
}
}
D. C語言中數組大小如何用已經被賦值的變數來定義 求詳細的樣本代碼。
這個需要用指針來動態分配內存,比如
int size=8;
int *nums;
nums=(int *)malloc(sizeof(int)*size);
然後你就可以把nums當成長度為8的數組使用了,其操作方式和int nums[8];一模一樣
E. c語言中數組的大小可以改變嗎
數組大小一旦確定就不能改變。
數組長度必須在編譯時確定,可以使用malloc函數在程序運行時動態分配所需「數組」長度。定義數組需要指定數組的長度,然後系統會根據這個長度分配固定的內存大小。
當出現intarray[10];這種情況的時候,是不可以變的,這時候變數的存儲空間在棧區。當intn;cin>>n;intarray=newint[n];的時候,數組可以根據n輸入的大小去分配內存,這時候數組存在堆區。
(5)c語言數組大小擴展閱讀
長度為0的數組在標准C和C++中是不允許的,如果使用長度為0的數組,編譯時會產生錯誤,提示數組長度不能為0。但在GNUC中,這種用法卻是合法的。
它的最典型的用法就是位於數組中的最後一項,這樣做主要是為了方便內存緩沖區的管理。如果長度為0的數組換為指針,那麼在分配內存時,需採用兩步:
1、需為結構體分配一塊內存空間;
2、再為結構體中的成員變數分配內存空間。這樣兩次分配的內存是不連續的,需要分別對其進行管理。當使用長度為0的數組時,則是採用一次分配的原則,一次性將所需的內存全部分配給它。相反,釋放時也是一樣的。
F. 求C語言將數組元素大小排序!!
C語言將數組元素大小排序方法:
以下使用的是冒泡排序法實線數組從小到大排序。
思想:每次相鄰兩個數比較,若升序,則將大的數放到後面,一次循環過後,就會將最大的數放在最後。
10、2、3、4、5、6、9、8、7、1是輸入的待排序的數列,經過第一次排序,將最大的,10放在最後,第二次排序,將剩下的2、3、4、5、6、9、8、7、1進行冒泡,將當前最大的9放在倒數第二的位置,以此類推。
以下是具體代碼:
#include <stdio.h>
int main(){
int nums[10] = {10, 2, 3, 4, 5, 6, 9, 8, 7, 1};
int i, j, temp, isSorted;
//優化演算法:最多進行 n-1 輪比較
for(i=0; i<10-1; i++){
isSorted = 1; //假設剩下的元素已經排序好了
for(j=0; j<10-1-i; j++){
if(nums[j] > nums[j+1]){
temp = nums[j];
nums[j] = nums[j+1];
nums[j+1] = temp;
isSorted = 0; //一旦需要交換數組元素,就說明剩下的元素沒有排序好
}
}
if(isSorted) break; //如果沒有發生交換,說明剩下的元素已經排序好了
}
for(i=0; i<10; i++){
printf("%d ", nums[i]);
}
printf(" ");
return 0;
}
(6)c語言數組大小擴展閱讀:
其他將數組從小到大排序的演算法
以下使用的是選擇排序法實現數組從小到大排序。
思想:從第一個數開始,每次和後面剩餘的數進行比較,若升序,則如果後邊的數比當前數字小,進行交換,和後面的所有的數比較、交換後,就會將當前的最小值放在當前的位置
輸入的序列為10、2、3、4、5、6、9、8、7、1進行一次排序後將最小的數放在了第一位(a[0]與它後面的所有數進行比較,若a[0]比後面的數大,進行交換),以此類推。
以下是具體代碼:
#include <stdio.h>
int main(void){
int a[1001];
int n,i,j,t;
scanf("%d",&n);//n為要排序的數的個數
//輸入需要排序的數
for(i=0;i<n;++i)
scanf("%d",a+i);
//接下來進行排序
for(i=0;i<n-1;++i)//因為每次需要和a[i]後面的數進行比較,所以到a[n-2](倒數第2個元素)就行
{
for(j=i+1;j<n;++j)//j從i後一個開始,a[i]與a[j]進行比較
{
if(a[i]>a[j])//a[i]為當前值,若是比後面的a[j]大,進行交換
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}//每排序一次,就會將a[i](包括a[i])之後的最小值放在a[i]的位置
for(j=0;j<n;++j)
printf("%-5d",a[j]);
printf(" ");
}
return 0;
}
G. c語言數組大小的問題
C語言中第一維大小是指數組第一維的長度:
如下定義一個一維數組:
int arr[10];
則其長度可以使用sizeof(arr)來求得:
printf("長度:%d",sizeof(arr));
其結果為:10
二維數組的第一維大小是指數組的行數,第二維是數組的列數:
定義一個二維數組:
int arr[5][8];
則其行數為5,列數為8,其第一維大小就為5。
特點
1.數組是相同數據類型的元素的集合。
2.數組中的各元素的存儲是有先後順序的,它們在內存中按照這個先後順序連續存放在一起。
3.數組元素用整個數組的名字和它自己在數組中的順序位置來表示。例如,a[0]表示名字為a的數組中的第一個元素,a[1]代表數組a的第二個元素,以此類推。