回覆列表
  • 1 # 錢布斯

    這無法確認,除非使用者自己規定了記號,當數組裡有規定的記號時就認為空了,比如空字串就是字元陣列的第一個元素為"\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;

    }

  • 中秋節和大豐收的關聯?
  • 有誰知道盛氏家族?