gpt4 book ai didi

c++ - 字符数组和指针的区别

转载 作者:可可西里 更新时间:2023-11-01 17:23:27 24 4
gpt4 key购买 nike

我在两个代码中做同样的事情。

在代码 1 中:我使用了 char * 并在 main 中使用 malloc 分配空间。

在代码 2 中:出于相同的目的,我使用了一个 char 数组。但为什么输出不同?

代码 1:

struct node2
{
int data;
char p[10];
}a,b;

main()
{
a.data = 1;

strcpy(a.p,"stack");
b = a;
printf("%d %s\n",b.data,b.p); // output 1 stack
strcpy(b.p,"overflow");
printf("%d %s\n",b.data,b.p); // output 1 overflow
printf("%d %s\n",a.data,a.p); // output 1 stack
}

代码 2:

struct node1
{
int data;
char *p;
}a,b;

main()
{
a.data = 1;
a.p = malloc(100);
strcpy(a.p,"stack");
b = a;
printf("%d %s\n",b.data,b.p); //output 1 stack
strcpy(b.p,"overflow");
printf("%d %s\n",b.data,b.p); // output 1 overflow
printf("%d %s\n",a.data,a.p); // output 1 overflow(why not same as previous one?)
}

最佳答案

在第二个示例中,您将 a 分配给 b,这意味着 a.p (char* ) 被分配给 b.p。因此,修改 b.p 指向的内存也就是修改 a.p 指向的内存,因为它们都指向内存中的相同位置.

在第一个示例中,您有两个独立的数组。将 a 分配给 b 将数组 a.p 中的每个 char 复制到 b.p - 这些内存块是 struct 的一部分,它们不是指向内存中特定部分的指针。在这种情况下,对 b.p 的任何修改都不会影响 a.p,因为它们完全不相关。

关于c++ - 字符数组和指针的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764987/

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