解題思路
1.對於sizeof( )
1.陣列名單獨放在sizeof()內部,陣列名表示整個陣列,sizeof(陣列名)計算的是整個陣列的大小,單位是位元組。
2.&陣列名,陣列名表示整個陣列,&陣列名,取出的是整個陣列的位址。
3.除此之外所有的陣列名都表示整個首元素位址。
2.對於strlen(),它尋找的是『\0』,有『\0』終止,沒有繼續數。
1.printf("%d\n", sizeof(a)); // 16
2.printf("%d\n", sizeof(a+0)); // 4 不是單獨放在sizeof()內是第乙個元素的位址
3.printf("%d\n", sizeof(*a)); //4 *a就是啊a
4.printf("%d\n", sizeof(a+1));//4 第二個元素的位址
5.printf("%d\n", sizeof(a[1])); //4 第二個元素
6.printf("%d\n", sizeof(&a)); // 4 位址都是4個位元組(32平台)
7.printf("%d\n", sizeof(&a+1)); //4 4後面的位址
8.printf("%d\n", sizeof(&a));/4 第乙個元素的位址
9.printf("%d\n", sizeof(&a+1));//4 第二個元素的位址
1.printf("%d\n", sizeof(a));
"%d\n", sizeof(a+0));
//4 位址
3.printf("%d\n", sizeof(*a));
//1 字元a
4.printf("%d\n", sizeof(a));
"%d\n", sizeof(&a));
"%d\n", sizeof(&a+1));
"%d\n", sizeof(&a+1));
//4 f的後面位址
8.printf("%d\n", sizeof(&a+1));
//4 第二個元素的位址
1.printf("%d\n", strlen(a));
//隨機值 因為沒有\0
2 printf("%d\n", strlen(a+0));
//隨機值 並且和上乙個一樣
3.printf("%d\n", strlen(*a));
//錯誤
4.printf("%d\n", strlen(a));
//錯誤
5.printf("%d\n", strlen(&a));
//隨機值
6.printf("%d\n", strlen(&a+1));
//隨機值 和1的隨機值差6
7.printf("%d\n", strlen(&a+1));
//隨機值 和1的隨機值差1
1.printf("%d\n",sizeof(arr)); //7 計算大小有'\0'
2.printf("%d\n",sizeof(arr+0)); // 4 位址是4位元組
3.printf("%d\n",sizeof(*arr)); // 1 首元素的大小
4.printf("%d\n",sizeof(arr));//1 首元素的大小
5.printf("%d\n",sizeof(&arr)); //4 取位址32位平台是4位元組,64位平台是8位元組
6.printf("%d\n",sizeof(&arr+1)); //4 取位址32位平台是4位元組,64位平台是8位元組
1.printf("%d\n",strlen(arr)); //6
2.printf("%d\n",strlen(arr+0));//6
3.printf("%d\n",strlen(*arr)); //錯誤 傳的是乙個值,所以錯誤。
4.printf("%d\n",strlen(arr));//錯誤 傳的是乙個值
5.printf("%d\n",strlen(&arr)); //6 &arr就是從頭數,數到『\0』』停止
6.printf("%d\n",strlen(&arr+1));// 隨機值,因為將整個arr跳過
7.printf("%d\n",strlen(&arr+1));//5 從第二個元素向後數
1.printf("%d\n",sizeof(p)); //4 指標變數都是4個位元組
2.printf("%d\n",sizeof(p+1));//4 p+1是b的位址
3.printf("%d\n",sizeof(*p));//1 a的大小
4.printf("%d\n",sizeof(p));// 同上
5.printf("%d\n",sizeof(&p));//4
6.printf("%d\n",sizeof(&p+1));//4 p是個指標變數,指向是a的位址,p是變數有自己的位址,char **pp =&p;pp是個二級指標,指向的是p的位址,指向的是char *型別的變數,加一跳過的是乙個char *的大小
7.printf("%d\n",sizeof(&p+1));//4
1.printf("%d\n",strlen(p)); //6
2.printf("%d\n",strlen(p+1));//5
3.printf("%d\n",strlen(*p));//錯誤 因為傳的是個值
4.printf("%d\n",strlen(p));//同上
5.printf("%d\n",strlen(&p));//隨機值
6.printf("%d\n",strlen(&p+1));//隨機值
7.printf("%d\n",strlen(&p+1));//5 從第二個元素後面數
1.printf("%d\n",sizeof(a)); //48
2.printf("%d\n",sizeof(a[0][0]));//4
3.printf("%d\n",sizeof(a[0]));//16 第一行的大小
4.printf("%d\n",sizeof(a[0]+1));//4 第一行第二個元素的位址
5.printf("%d\n",sizeof(a+1)); //4 第二行的位址
6.printf("%d\n",sizeof(&a[0]+1));//4 第二行的位址
7.printf("%d\n",sizeof(*a));//16 不是單獨放,a表示第一行的位址
8.printf("%d\n",sizeof(a[3])); //16 sizeof()內部的表示式是不參與運算的,所以結果是16,雖然第4行不存在但是不訪問
sizeof關鍵字是在編譯時,括號裡的表示式是在執行時的,所以不執行sizeof的表示式。 C語言練習之陣列小練習
1.選修某課程的學生共10人,學生的資訊包括學號 班級 姓名 成績,按成績高低輸出學生名單 用選擇法排序 include include include define n 10 選修某課程的學生共10人,學生的資訊包括學號 班級 姓名 成績,按成績高低輸出學生名單 用選擇法排序 intmain fo...
C語言小練習
1.有1 2 3 4個數字,能組成多少個互不相同且無重複數字的三位數?都是多少?使用陣列 includeint main void int num 0,i,j 0 scanf d num for i 0 i 10 i if i num for i 0 i 10 i 2.有乙個長度為10的陣列,根據下...
C語言小練習
1.列印100 200之間的素數 include include include 100 200間素數求法 int main if j i printf d n i 2.偶數都為2的倍數,所以均不為素數,這樣我們就可以排除掉偶數,直接判斷奇數是不是素數 int i 100 for i 100 i 2...