gpt4 book ai didi

c - C语言中将字符串赋值给指针

转载 作者:行者123 更新时间:2023-12-02 05:33:15 24 4
gpt4 key购买 nike

我是C语言的新手,我的问题是关于指针的。据我了解和搜索指针只能存储其他变量的地址,而不能存储实际值(如整数或字符)。但是在下面的代码中,char 指针 c 实际上存储了一个字符串。它执行时没有错误,并将输出作为“名称”。

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

任何人都可以解释指针如何在没有任何内存的情况下存储字符串,或者是否在创建内存的地方创建了内存以及可以创建多少大小。

我尝试将它与整数类型指针一起使用
#include <stdio.h>
main()
{
int *c;
c=10;
printf("%d",c);
}

但它给出了一个错误
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);
^

指针存储变量的地址,那么为什么整数指针与字符指针不同。

如果我对指针有什么遗漏,请解释一下。

最佳答案

  • char *c;
    c="name";

    如果您在这里观察,您不是将字符串“name”分配给变量 c,而是分配内存的基地址,其中 name存储到变量 c .
  • 字符串 name存储在编译器创建的字符串表中,这种形式的所有字符串都存储在字符串表中,这个字符串表是一个const类型,意味着你不能再次写入这个位置。例如你可以试试这两行 char *p = "Hello" ; strcpy(p,"Hi"); .编译时,您将在第二行出现错误。
  • int *c;
    c = 10;

    在上面的代码中,您正在创建一个整数指针并为其分配 10,这里的编译器理解您将 10 作为地址分配。您需要了解的另一件事是所有指针变量仅存储无符号整数常量。所以即使是char *cint *c在这两种情况下,变量 c 仅存储一个无符号整数。
  • 关于c - C语言中将字符串赋值给指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24690475/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com