关于输出的说明

时间:2013-10-28 10:00:26

标签: c pointers

任何人都可以给我输出

的解释
#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

6 个答案:

答案 0 :(得分:3)

*a[0]的类型为chara[0]的类型为char*(指针)。

sizeof(char) == 1sizeof(char*) == 4

a的类型为char*[]sizeof(a) == (7 * sizeof(char*)) == 28

答案 1 :(得分:3)

输出:

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,是数组中元素的数量。

答案 2 :(得分:2)

28 - 尝试打印出sizeof(char *),它将是4(字节)所以如果你有7个字符串文字,你的char *指针数组将占用4 * 7 = 28个字节

1 - * a [0]是数组中第一个指针指定的地址上单个字符的大小。

但是你使用sizeof(a[0])获取字符串的数量有点奇怪。 sizeof(a [0])等于sizeof(char *),它又是4(字节)。所以你的周期将打印出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]);
}

答案 3 :(得分:2)

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]);
}

答案 4 :(得分:0)

这是一个指针数组。在32位机器中,指针的大小为32位(a.k.a.4字节)。在第一个printf()中,打印数组内所有指针的大小总和。你有7行 - &gt; 7 * 32 = 224位= 28字节。 在第二个printf()中,打印第一行的第一个字符的大小。 char类型是8bit(a.k.a。大小为1字节)。

答案 5 :(得分:-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个字符串。