首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符数组与关于大小的字符指针

字符数组与关于大小的字符指针
EN

Stack Overflow用户
提问于 2019-07-08 06:43:20
回答 3查看 99关注 0票数 0

引用我读过的一篇文章:

*...Consider使用以下两个变量:

代码语言:javascript
复制
char s6[ ] = "hello", *s7 = "hello";

s6为6个字节分配空间;s7为字符分配10 (通常)-6的空间,另为指针变量分配4个空间。

想知道谁持有s6的地址(数组中的第一个字符)?s6如何“保存”指针的4个字节?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-08 06:54:15

简单地说,它没有存储在程序中的任何地方。只有编译器才能跟踪它。

在引擎盖下:

  • s6的意思是"address XXXXXXXX:一个包含值'H', 'e', 'l', 'l', 'o', 0的六个字节的块“。
  • s7的意思是"address YYYYYYYY:一个包含值ZZ, ZZ, ZZ, ZZ的四个字节的块“
  • *s7的意思是"address ZZZZZZZZ:一个字节的块,保存值'H'“。

程序实际上不必将值存储;编译器只需插入您使用s6的任何地方的值XXXXXXXX。

类似地,程序不必在任何地方存储YYYYYYYY,但它确实存储着ZZZZZZZZ,因为您明确地这样说了(您说将值ZZZZZZZZ赋给变量s7)。

但是,如果您想将XXXXXXXX存储在某个地方,您可以轻松地这样做:

代码语言:javascript
复制
char my_pointer* = &s6;

现在,my_pointer的意思是"address :一个包含值XX, XX, XX, XX的四个字节的块“。

这是假设你在一个有四个字节指针的系统上;现在,指针很可能是八个字节,或者64位。

票数 4
EN

Stack Overflow用户

发布于 2019-07-08 06:46:52

s6为6个字节分配空间;s7为字符分配10 (通常)-6的空间,另为指针变量分配4个空间。

不,那不对。

s6有完全6个字节的空间,s7有指针的空间(大小)(通常是4或8个字节,取决于您的体系结构),它指向用于初始化指针的字符串。

换句话说,

  • s6的大小为sizeof ("hello")
  • s7的大小是sizeof (s7),即sizeof (char *)

您可以执行以下程序来检查大小:

代码语言:javascript
复制
#include  <stdio.h>

int main(void)
{
    char s6[ ] = "hello", *s7 = "hello";

    printf("s6 = %zu\n", sizeof (s6));
    printf("s7 = %zu\n", sizeof (s7));

    return 0;
}

在我的系统中,他们屈服于:

s6 =6 // sizeof ("hello"),或,sizeof (char 6) s7 =8 // sizeof (char *)

票数 3
EN

Stack Overflow用户

发布于 2019-07-08 06:54:26

想知道谁持有s6的地址(数组中的第一个字符)?s6如何“保存”指针的4个字节?

编译器/链接器保存此地址。它被视为常量,因为它不能在运行时被修改。我希望这能帮到你。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56929583

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档