如何将指针指向字符串而不直接声明字符串

时间:2017-02-04 09:11:20

标签: c string pointers c-strings

#include <stdio.h>

int main(){
    char *ch = "Hello, World";//character pointer pointing to a string without declaration.
    printf("%s", ch);//printing the string without <i>dereferencing</i> it.
}

我在一本书中看到了一个例子,上面给出了代码。我不明白字符指针如何指向字符串而不首先声明字符串。
也没有用于打印字符串的取消引用运算符。

3 个答案:

答案 0 :(得分:2)

正如@tryurbest所述,为什么它适用于指针:

当你在C中说var request = require('request'); request('http://www.google.com', function (error, response, body) { if (!error && response.statusCode == 200) { console.log(body) // Show the HTML for the Google homepage. } }) 时,你正在内存中分配一个指针。当您编写char * ch时,您将在内存中创建一个字符串文字并使指针指向它。当您创建另一个字符串文字“new string”并将其分配给char *ch = "Hello, World";时,您所做的只是改变指针指向的位置。

另一方面,为了增加信息,为什么它不适用于数组:

当您说char ch1 [] =“Hello,World”时,您正在创建一个字符串文字,并在定义期间将其放入数组中。可以不给出大小,因为数组计算它并向它附加'\ 0'。如果不调整大小,则无法将任何内容重新分配给该数组。

希望这有助于澄清一些事情。

答案 1 :(得分:1)

"Hello, World"数据块中的字符串文字或只读内存存储。变量ch是指向char的指针,它使用第一个字符的位置进行初始化。

答案 2 :(得分:0)

这就是printf如何使用const char *参数。 (你的指针实际指向const数据。)

从指针表示的内存位置开始,逐字符打印,直到达到NUL终结符。

C标准库字符串函数以这种方式工作。简单地说一下语言是如何模拟字符串的。