這無法確認,除非使用者自己規定了記號,當數組裡有規定的記號時就認為空了,比如空字串就是字元陣列的第一個元素為"\0"的字串。一般情況下是這樣處理的:當數組裡的資料已經失去存在的意義時,就認為它空了,可以用新的資料來覆蓋了——根本沒有“清空”的必要,也不可能真正清空,任何符號在數組裡其實都是“資料”。所以資料只有有效與無效之別,沒有有數與無數之分。有時候,希望數組裡一開始或在執行中的某個時刻成為全0或其他符號,那實際上就是後續程式碼需要的資料,並不是“清空”的意思。對於靜態宣告的陣列,可以這麼做:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
int a[10]={1,2,3,4,5,6,7,8,9,10},i,f=1<<sizeof(int)*8-1;//用最小的int數做空標記
for(i=0;i<10;printf("%3d",a[i++]));//陣列a中的資料使用完畢
printf("\n");
a[0]=f;//認為a陣列空了
if(a[0]==f)//檢測到a中陣列無效了,就可重新輸入資料
for(i=0;i<10;scanf("%d",a+i++));
return 0;
}如果是動態申請的陣列,那就更好辦了,陣列的資料失效後,用free釋放空間並使指標為NULL即可,需要時重新動態申請。如:
#include "stdlib.h"
int *p,i;
p=(int *)malloc(sizeof(int)*10);//動態申請陣列空間
for(i=0;i<10;scanf("%d",p+i++));//輸入資料
for(i=0;i<10;printf("%d ",p[i++]));//資料使用完畢
free(p);//釋放空間
p=NULL;//使指標無效
}
這無法確認,除非使用者自己規定了記號,當數組裡有規定的記號時就認為空了,比如空字串就是字元陣列的第一個元素為"\0"的字串。一般情況下是這樣處理的:當數組裡的資料已經失去存在的意義時,就認為它空了,可以用新的資料來覆蓋了——根本沒有“清空”的必要,也不可能真正清空,任何符號在數組裡其實都是“資料”。所以資料只有有效與無效之別,沒有有數與無數之分。有時候,希望數組裡一開始或在執行中的某個時刻成為全0或其他符號,那實際上就是後續程式碼需要的資料,並不是“清空”的意思。對於靜態宣告的陣列,可以這麼做:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
int main(void){
int a[10]={1,2,3,4,5,6,7,8,9,10},i,f=1<<sizeof(int)*8-1;//用最小的int數做空標記
for(i=0;i<10;printf("%3d",a[i++]));//陣列a中的資料使用完畢
printf("\n");
a[0]=f;//認為a陣列空了
if(a[0]==f)//檢測到a中陣列無效了,就可重新輸入資料
for(i=0;i<10;scanf("%d",a+i++));
printf("\n");
return 0;
}如果是動態申請的陣列,那就更好辦了,陣列的資料失效後,用free釋放空間並使指標為NULL即可,需要時重新動態申請。如:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "stdlib.h"
int main(void){
int *p,i;
p=(int *)malloc(sizeof(int)*10);//動態申請陣列空間
for(i=0;i<10;scanf("%d",p+i++));//輸入資料
for(i=0;i<10;printf("%d ",p[i++]));//資料使用完畢
free(p);//釋放空間
p=NULL;//使指標無效
printf("\n");
return 0;
}