在C语言中将字符串分配给指针

Sud*_*eer 2 c string pointers

我是C语言的新学习者,我的问题是指针.到目前为止,我学习和搜索指针只能存储其他变量的地址,但不能存储实际值(如整数或字符).但是在下面的代码中,char指针c实际存储了一个字符串.它执行时没有错误,并将输出作为"名称".

#include <stdio.h>
main()
{
    char *c;
    c="name";
    puts(c);
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释一个指针如何存储没有任何内存的字符串,或者是否创建了创建它的内存以及可以创建多少大小的内存.

我尝试使用整数类型指针

#include <stdio.h>
main()
{
    int *c;
    c=10;
    printf("%d",c);
}
Run Code Online (Sandbox Code Playgroud)

但它给出了一个错误

cc     test.c   -o test
test.c: In function ‘main’:
test.c:5:3: warning: assignment makes pointer from integer without a cast   [enabled by default]
c=10;
^
test.c:6:2: warning: format ‘%d’ expects argument of type ‘int’, but argument 2 has type ‘int *’ [-Wformat=]
printf("%d",c);
^
Run Code Online (Sandbox Code Playgroud)

指针存储变量的地址然后为什么整数指针与字符指针不同.

如果有什么我缺少关于指针plz解释.

pri*_*nce 8

  1. char *c; c="name";

    如果你在这里观察,你没有为变量c指定字符串"name",但是,你要分配name存储在变量中的内存的基地址c.

  2. 该字符串name存储在由编译器创建的字符串表中,此表单的所有字符串都存储在字符串表中,此字符串表是const类型,这意味着您无法再次写入此位置.例如,你可以尝试这两行char *p = "Hello" ; strcpy(p,"Hi");.编译时,你会在第二行得到错误.

  3. int *c; c = 10;

    在上面的代码中,您将创建一个整数指针并为其分配10,编译器在此理解您将10指定为地址.您需要了解的另一件事是所有指针变量仅存储无符号整数常量.因此,即使它是char *cint *c在这两种情况下,变量c仅存储无符号整数.


Yu *_*Hao 5

C 中的字符串不是本机类型。它们是空终止char数组。在你的例子中,

char *c;
c="name";
Run Code Online (Sandbox Code Playgroud)

指针c不包含字符串本身的内容,而是包含字符串文字的地址"name"(更准确地说,它的第一个元素的地址)。