首先還是關於這兩個東西
- sizeof() 用於計算所佔空間大小
- strlen() 只用於求字串長度
/**
* sizeof 計算所佔空間大小 \0也會計算
* strlen 只能用來求字串長度 直到找到字串結束標誌\0
* */
char arr1[]={'a','b','c'}; // a b c
char arr2[]="abc"; // a b c \0
printf("%d\n",sizeof(arr1)); 3
printf("%d\n",sizeof(arr2)); 4
printf("%d\n",strlen(arr1)); //隨機值 找不到字串結束標誌\0
printf("%d\n",strlen(arr2)); 3
陣列長度計算:
一維陣列數= sizeof(array)/sizeof(array[0]);
二維陣列行數 = sizeof(array)/sizeof(array[0]);
二維陣列列數 = sizeof(array[0])/sizeof(array[0][0]);
陣列下標從0開始
關於二維陣列[][]第二個列不能省略
int arr3[]={1,2,3,4};
//取出的是首元素的sizeof(地址)
printf("%p\n",arr3);
printf("%p\n",&arr3[0]);
//取出的是整個陣列的地址
printf("%p\n",&arr3);
還有一些練習題:
陣列的下標
必須是整形常量表示式
注意注意:
其包含的元素不能超過其下標
是正確的
#define M 8
int a[M]
錯誤:
int M=8;
int a[M];
關於兩個字串比較不能使用關係運算子
要使用strcmp函式
關於字元之類的函式:
關於二維陣列在記憶體中存放順序 以行為主順序存放
輸出為9
a b \n \\ 0 1 2 2 \\ \0結束標誌
char s[] = "ab\n\\0122\\\0";
printf("%d", strlen(s));
china直接複製到str陣列裡面 輸出5
char str[] = "String";
printf("%d\n", strlen( strcpy(str, "China")));
char str[10]="12345";
讀取覆蓋原來的陣列內容
gets(str);
strcat(str,"def");
printf("%s",str);
注意注意for迴圈的對其兩層互不影響
\t 縮排相當於Tab鍵
int a[10] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
for (int i = 0; i < 10; ++i)
a[i] = add(a[i], i);
for (int i = 0; i < 10; ++i)
printf("%d\t", a[i]);