任何人都可以给我输出
的解释#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
答案 0 :(得分:3)
*a[0]
的类型为char
,a[0]
的类型为char*
(指针)。
sizeof(char) == 1
,sizeof(char*) == 4
。
a
的类型为char*[]
,sizeof(a) == (7 * sizeof(char*)) == 28
。
答案 1 :(得分:3)
输出:
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,是数组中元素的数量。
答案 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个字符串。