你能帮我理解这个程序吗?

时间:2019-05-25 17:56:18

标签: c

您能帮我理解为什么我得到此输出吗?

#include<stdio.h>
#include<string.h>
void main() {
char a[] = "Hello World";
char *p;
p=a;
printf("%d%d%d%d",sizeof(a),sizeof(p),strlen(a),strlen(p));
}

输出: 1281111 (我的操作系统是64位)

说如果上面的代码经过编译并显示1241111(输出), 在32位系统上运行。由于是64位,因此显示1281111。

在第一年,我看到了这个问题,当我去寻找输出时, 我得到1281111。

但是令人惊讶的是,以上代码的输出有两个选择:1)12121111和2)1221111。(大学问题)。

1 个答案:

答案 0 :(得分:1)

如果将printf()语句更改为以下内容,则更容易了解发生了什么:

printf("%d\n%d\n%d\n%d\n",sizeof(a),sizeof(p),strlen(a),strlen(p));

在我的系统上,这将导致输出:

12
8
11
11

换句话说:

  • 数组的大小为12个字节。 (该字符串为11,加上\0字符为一个。)
  • 指针的大小为8个字节(因为我使用的是具有64位内存地址的计算机,而不是可能会输出4的32位计算机)。
  • 当用作字符串(char*指针)时,ap是等效的。 (因为p指向a。)字符串Hello World的长度为11(因为strlen()不包含\0字节在字符串的末尾)。

希望这会有所帮助。