【c語言】指標與陣列小練習
一維陣列
int a[]={1,2,3,4}; 1.printf(“%d\n”,sizeof(a)); //16 sizeof(陣列名)求的是整個陣列的大小 2.printf(“%d\n”,sizeof(a+0)); //4 表示第一個元素地址的大小()地址就是4個位元組或者8個) 3.printf(“%d\n”,sizeof(*a)); //4 表示第一個元素大小 4.printf(“%d\n”,sizeof(a+1)); //4 表示第二個元素地址的大小 5.printf(“%d\n”,sizeof(a【1】)); //4 表示第二個元素的大小 6.printf(“%d\n”,sizeof(&a)); //4 取出整個陣列的地址 7.printf(“%d\n”,sizeof(*&a)); //16 整個陣列的大小 8.printf(“%d\n”,sizeof(&a+1)); //4 跳過整個陣列還是地址 9.printf(“%d\n”,sizeof(&a【0】)); //4 首元素的地址 10.printf(“%d\n”,sizeof(a【1】+1)); //4 第三個元素的地址
字元陣列
char arr[]={‘a’,’b’.’c’,’d’,’e’,’f’}; 1.printf(“%d\n”,sizeof(arr)); //6 陣列的大小 2.printf(“%d\n”,sizeof(arr+0)); //4 地址 3.printf(“%d\n”,sizeof(*arr)); //1 4.printf(“%d\n”,sizeof(arr【1】)); //1 5.printf(“%d\n”,sizeof(&arr)); //4 6.printf(“%d\n”,sizeof(&arr+1)); //4 7.printf(“%d\n”,sizeof(&arr[0]+1)); //4 第二個元素的地址
1.printf(“%d\n”,strlen(arr)); //隨機值 因為沒有”\n” 2.printf(“%d\n”,strlen(arr+0)); //隨機值 3.printf(“%d\n”,strlen(*arr)); //錯誤 給出97的地址 4.printf(“%d\n”,strlen(arr[1])); //錯誤 給出98的地址 5.printf(“%d\n”,strlen(&arr)); //隨機值 同2 6.printf(“%d\n”,strlen(&arr+1)); //隨機值 7.printf(“%d\n”,strlen(&arr[0]+1)); //隨機值
char arr[]=”abcdef”; 1.printf(“%d\n”,sizeof(arr)); //7 陣列的大小 2.printf(“%d\n”,sizeof(arr+0)); //4 地址 3.printf(“%d\n”,sizeof(*arr)); //1 4.printf(“%d\n”,sizeof(arr【1】)); //1 5.printf(“%d\n”,sizeof(&arr)); //4 6.printf(“%d\n”,sizeof(&arr+1)); //4 7.printf(“%d\n”,sizeof(&arr[0]+1)); //4 第二個元素的地址
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[1])); //錯誤 5.printf(“%d\n”,strlen(&arr)); //6 6.printf(“%d\n”,strlen(&arr+1)); //隨機值 因為跳過了f 7.printf(“%d\n”,strlen(&arr[0]+1)); //5 從b開始數
char *arr=”abcdef”; 1.printf(“%d\n”,sizeof(arr)); //4 指標 2.printf(“%d\n”,sizeof(arr+0)); //4 b的地址 3.printf(“%d\n”,sizeof(*arr)); //1 第一個元素 4.printf(“%d\n”,sizeof(arr【0】)); //1 第一個元素 5.printf(“%d\n”,sizeof(&arr)); //4 二級指標 6.printf(“%d\n”,sizeof(&arr+1)); //4 p下一塊空間的地址 7.printf(“%d\n”,sizeof(&arr[0]+1)); //4 第二個元素的地址
1.printf(“%d\n”,strlen(arr)); //6 2.printf(“%d\n”,strlen(arr+0)); //5 從b開始數 3.printf(“%d\n”,strlen(*arr)); //錯誤 4.printf(“%d\n”,strlen(arr[1])); //錯誤 5.printf(“%d\n”,strlen(&arr)); //隨機值 從p的地址往後數 6.printf(“%d\n”,strlen(&arr+1)); //隨機值 7.printf(“%d\n”,strlen(&arr[0]+1)); //5
二維陣列
int a[3][4]={0};
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 a【0】是第一行的地址不是單獨放括號裡降級變為第一行第一個元素地址 +1表示第一行的第二個元素的地址 5.printf(“%d\n”,sizeof(a+1)); //4 a表示第一行的地址+1變為第二行的地址,是地址就是4 6.printf(“%d\n”,sizeof(&a[0]+1)); //4 第一行的地址+1變為第二行的地址,是地址就是4 7.printf(“%d\n”,sizeof(*a)); //16 二維陣列首元素地址 8.printf(“%d\n”,sizeof(a[3])); //16 sizeof()內部表示式內部不參與運算,所以不出錯 9.printf(“%d\n”,sizeof*(a+1)); //16