【问题标题】:how does a pointer stores a string in memory in c指针如何在c中将字符串存储在内存中
【发布时间】:2013-12-05 08:28:26
【问题描述】:
char *p = "hello";  
printf("%c",*p); //output would be ***h***
printf("%s",p);  //output would be ***hello***

在第 2 行为什么我们必须使用 *pprintchar 而在第 3 行我们必须使用 pprint 一个字符串。

同样在第 1 行,字符串是如何存储在内存中的。

【问题讨论】:

  • const char *p = "hello"char p[] = "hello"char *p = "hellp" 是等待发生的段错误。例如,请参阅this
  • 'char*p'中取出'*p'得到'char',即第一个'printf'收到一个字符,现在从'char*p'中取出'p'得到'char*' ,即第二个'printf'接收一个char指针,不知道是不是设计的

标签: c pointers c-strings


【解决方案1】:

数组只是一个指向内存块的指针,该内存块按顺序填充特定类型的项目。

p 在这种情况下是指向该数组中第一个字符的指针,

*p 将取消引用指针,这将返回该特定位置的项目(即字符串中的第一个字符。

c 中最常见的字符串表示形式(以及 %s 使用的字符串表示形式)是以 null 结尾的字符串。 IE。该字符串将从p 开始并一直持续到达到空值 (\0)。

【讨论】:

    【解决方案2】:

    "hello" 保存在系统的只读存储器中

    p 是一个指针,它指向您的"hello" 内存的开头。所以它指向内存的第一个元素。

    *p 返回p 指向的内存内容。而p"hello" 内存的第一个元素的地址,所以*p 将返回'h'

    【讨论】:

      【解决方案3】:

      字符串由一串字符存储在内存中,并以 0 字符结尾。 例如,如果您有一个字符串文字“Hello”,该字符串将作为 {'H', 'e', 'l', 'l', 'o', '\0 的 char* 数组存储在内存中'}。

      因此,如果您访问数组 ( *array ),您只能访问数组的第一个字符。您可以遍历数组,直到找到 \0 - 字符以了解字符串的结束位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-03
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        • 2018-05-25
        • 2014-01-17
        相关资源
        最近更新 更多