簡體   English   中英

關於輸出的說明

[英]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) == 1sizeof(char*) == 4

的類型achar*[] sizeof(a) == (7 * sizeof(char*)) == 28

輸出:

28

a是7個指針的數組; 每個指針在系統上的大小為4。 因此28。

1

*aa[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM