”變長數組“確實是有的,是在C99標準才出現的。題主的寫法沒有錯。變長指的就是可以用變量指定數組大小,而不是說數組大小可以在runtime改變。(”變長“這個這個翻譯很怪啊.....)
成都創新互聯公司專注于新會網站建設服務及定制,我們擁有豐富的企業做網站經驗。 熱誠為您提供新會營銷型網站建設,新會網站制作、新會網頁設計、新會網站官網定制、小程序制作服務,打造新會網絡公司原創品牌,更為您提供新會網站排名全網營銷落地服務。
寫全的話應該是
int x = 2; //x定義并賦值,當然不一定是2
char array[x];測試了一下,這樣的代碼在VC6.0下會報錯,因為對C99新標準沒有很好地實現。VS2005也不行。VS2013可以正確編譯。gcc
3.2.2也可以正確編譯。
int main()
{
unsigned char n;
for(n=0;n10;n++)
{
char x[n]; //注意變長數組必須在程序塊內定義,不能在文件內定義
x[n]=n;
printf("%d",x[n]);
fflush(stdout);
}
return 0;
}
GCC實測通過
動態分配的數組可以自定義數組的長度,示例如下:
#include
stdio.h
#include
string.h
#include
stdlib.h
int
main()
{
printf("輸入要分配的內存大小:");
int
size;
scanf("%d",
size);
//輸入自定義的數組長度
int
*pstart
=
(int
*)malloc(sizeof(int)
*size);
if
(pstart==0)
{
printf("不能分配內存\n");
return
0;
}
memset(pstart,
0x00,
sizeof(int)
*
size);
int
inx;
for
(inx=0;
inx!=size;
++inx)
pstart[inx]
=
inx;
for
(inx=0;
inx!=size;
++inx)
printf("%d\t",
pstart[inx]);
printf("\n");
return
0;
}
你的想法是可以的。
實際上C提供一個標準的庫函數可以實現這個功能。
void *realloc(void *mem_address, unsigned int newsize);
譬如:
int *p = malloc(sizeof(int)*3);
p[0]=0;p[1]=1;p[2]=2;
p = realloc(p, sizeof(int)*4);
這個時候,p指向的前三個int的值還是1、2、3,而且可以對第四個int賦值了。realloc會自動把原來的數據復制到新的內存空間上去。
網站名稱:c語言函數中變長數組 c語言變長數組定義
分享路徑:http://m.newbst.com/article18/doghcdp.html
成都網站建設公司_創新互聯,為您提供網站內鏈、ChatGPT、關鍵詞優化、網站建設、營銷型網站建設、服務器托管
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯