C语言中SizeOf指针的大小是多少?

2026-04-16 22:421阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计309个文字,预计阅读时间需要2分钟。

C语言中SizeOf指针的大小是多少?

这段代码的目的是声明一个字符数组`c`,初始化为`'a'`, `'b'`, `'c'`,然后通过指针`p`访问数组的第一个元素,并打印出指针和数组的地址。以下是简化后的版本:

cchar c[]={'a', 'b', 'c'};int *p=&c[0];printf(%d\n, sizeof(p)); // 打印指针大小printf(%d\n, sizeof(c)); // 打印数组大小

这段代码中,`sizeof(p)`打印出指针的大小,通常为4个字节(在32位系统中),而`sizeof(c)`打印出数组`c`的大小,即3个字符加上一个空字符`\0`,总共4个字节。所以,`printf`语句会分别打印出4和1。这里没有出现错误,`p`指向的是`c`的第一个元素的地址,而`c`是一个包含4个字节(3个字符加上一个空字符)的数组。

char c[] = {'a','b','c'}; int* p = &c[0]; printf("%i\n", sizeof(*p)); //Prints out 4 printf("%i\n", sizeof(*c)); //Prints out 1

我对这部分代码非常困惑. p和c都表示第0个索引处的数组c的地址.但是为什么sizeof(* p)打印4?不应该是1吗?

因为p的类型是int *,所以* p的类型是int,在你的实现上显然是4个字节宽.

C语言中SizeOf指针的大小是多少?

如果您不希望程序调用未定义的行为,请使用%zu打印size_t(产量大小).

本文共计309个文字,预计阅读时间需要2分钟。

C语言中SizeOf指针的大小是多少?

这段代码的目的是声明一个字符数组`c`,初始化为`'a'`, `'b'`, `'c'`,然后通过指针`p`访问数组的第一个元素,并打印出指针和数组的地址。以下是简化后的版本:

cchar c[]={'a', 'b', 'c'};int *p=&c[0];printf(%d\n, sizeof(p)); // 打印指针大小printf(%d\n, sizeof(c)); // 打印数组大小

这段代码中,`sizeof(p)`打印出指针的大小,通常为4个字节(在32位系统中),而`sizeof(c)`打印出数组`c`的大小,即3个字符加上一个空字符`\0`,总共4个字节。所以,`printf`语句会分别打印出4和1。这里没有出现错误,`p`指向的是`c`的第一个元素的地址,而`c`是一个包含4个字节(3个字符加上一个空字符)的数组。

char c[] = {'a','b','c'}; int* p = &c[0]; printf("%i\n", sizeof(*p)); //Prints out 4 printf("%i\n", sizeof(*c)); //Prints out 1

我对这部分代码非常困惑. p和c都表示第0个索引处的数组c的地址.但是为什么sizeof(* p)打印4?不应该是1吗?

因为p的类型是int *,所以* p的类型是int,在你的实现上显然是4个字节宽.

C语言中SizeOf指针的大小是多少?

如果您不希望程序调用未定义的行为,请使用%zu打印size_t(产量大小).