[英]Explanation about the output
誰能給我輸出的解釋
#include<stdio.h>
int main(void){
int i;
char *a[]={ "This is first line",
"This is second line",
"This is third line",
"This is fourth line",
"This is fifth line",
"This is sixth line",
"This is seventh line end"};
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(*a[0]));
for(i=0;i<=sizeof(a[0]);i++){
printf("%s\n",a[i]);
}
}
輸出:
28
1
This is first line
This is second line
This is third line
This is fourth line
This is fifth line
*a[0]
類型為char
,而a[0]
類型為char*
(指針)。
sizeof(char) == 1
, sizeof(char*) == 4
。
的類型a
是char*[]
sizeof(a) == (7 * sizeof(char*)) == 28
。
輸出:
28
a
是7個指針的數組; 每個指針在系統上的大小為4。 因此28。
1
*a
與a[0]
相同,因此a[0][0]
, *a[0]
, **a
和(*a)[0]
都等效:它是第一個字符串的第一個字符。
在那之后,您應該獲得七行。
This is first line
This is second line
This is third line
This is fourth line
This is fifth line
等一下 嗯...
for(i=0;i<=sizeof(a[0]);i++){
對我來說似乎完全錯誤:
for(i=0;i<sizeof(a)/sizeof(a[0]);i++){
應該更好。 為什么? i<=sizeof(a[0])
是i<=4
,給出5行。
但是, i<sizeof(a)/sizeof(a[0]);
是i < 28/4
,即7,即數組中元素的數量。
28-嘗試打印出sizeof(char *),它將為4(字節),因此,如果您有7個字符串文字,則char *指針數組將占用4 * 7 = 28個字節
1-* a [0]是數組中第一個指針指定的地址處單個字符的大小。
但是,您使用sizeof(a[0])
來獲取字符串數是很奇怪的。 sizeof(a [0])等於sizeof(char *),又是4(字節)。 因此您的for循環將打印出5個字符串,因為它等於:
for(i=0;i<=4;i++){
它將運行0、1、2、3、4。 要打印出所有字符串,您應該使用:
for(i=0;i<sizeof(a)/sizeof(char*);i++){
printf("%s\n",a[i]);
}
char * a []是指向字符串的指針數組
sizeof將給出數組具有的字節數,但不會告訴您有多少個字符指針,要獲得總大小除以一個指針的大小即可:
sizeof( a ) / sizeof( char * )
另一種方法是在數組中添加一個NULL指針
char *a[]={ "This is first line",
"This is second line",
"This is third line",
"This is fourth line",
"This is fifth line",
"This is sixth line",
"This is seventh line end",
NULL };
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(*a[0]));
for(i=0; a[i] != NULL;i++){
printf("%s\n",a[i]);
}
這是一個指針數組。 在32位計算機中,指針的大小為32位(也稱為4字節)。 在第一個printf()中,您將打印數組內部所有指針的大小之和。 您有7行-> 7 * 32 = 224位= 28字節。 在第二個printf()中,打印第一行第一個字符的大小。 字符類型為8位(也就是1個字節)。
a是7個字符指針的數組。 因此sizeof(a)為7 * sizeof(int)= 28。
a [0]是字符指針,因此a [0](* a [0])的值是大小為1的字符。
a [0]也是類型為int的字符指針,其大小為4。因此,循環從i = 0到i = 4。 因此打印5個字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.