【问题标题】:How to get a pointer to a string in C using the reference operator?如何使用引用运算符获取指向 C 中字符串的指针?
【发布时间】:2011-07-12 18:38:52
【问题描述】:

是否有给定一个类似"my example\n" 的字符串来获取指向它的指针?例如,&"my example\n"&{"my example\n"}?

编辑:我想问一些基本的问题是我昨晚没有睡觉的结果。嗯,无论如何,谢谢你的帮助。

【问题讨论】:

    标签: c string pointers reference


    【解决方案1】:

    已经是指针了:

    char *string = "my string\n";
    

    string 将是一个指向文字字符串的指针。

    【讨论】:

    • 它实际上是一个数组(看看如果你对它应用sizeof 会发生什么),但在大多数情况下它会衰减为一个指针。
    • @R.. 是的,我明白了,但我只是尽量不让它太复杂。问题是如何获得指向文字的指针——这就是我试图展示的内容
    【解决方案2】:

    已经是地址了。

    示例:char * addr= "my example\n";

    这里,变量addr保存了字符串的地址。

    【讨论】:

      【解决方案3】:

      对于您的代码,字符串常量显示为指针;特别是指向字符串中第一个字符的字符指针 char*。

      【讨论】:

        【解决方案4】:

        为了更严格:字符串文字的类型为const char[]。但是const char[] 可以隐式转换为const char*。所以你可以通过赋值轻松获取指针

        const char* p = "string";
        

        请注意,如果您的下一行是

        const char* p1 = "string";
        

        --p1的值不保证等于p的值:不同的字符串常量可能有不同的地址(但不是必须的)。

        请注意,p 将是指向第一个字符而不是整个字符串的指针。

        另一个警告是,您不应该尝试获取char* 指针(通过将const 强制转换),因为这将导致未定义的行为。例如,编译器可能会将字符串文字放入只读内存中,程序就会简单地崩溃。

        【讨论】:

        • “隐式转换”是矛盾的,你所描述的实际上比隐式转换强。在大多数情况下,无论您是否愿意,数组都会衰减为指针。
        • 嗯,正确的解释是here,但我想对“幕后”发生的事情给出一些基本概念。
        猜你喜欢
        • 2016-12-01
        • 2011-05-09
        • 1970-01-01
        • 2021-06-28
        • 2011-04-12
        • 1970-01-01
        • 1970-01-01
        • 2015-06-22
        • 1970-01-01
        相关资源
        最近更新 更多