Ani*_*rya 8 c c++ arrays struct pointers
我在两个代码中做同样的事情.
在代码1中:我使用了a char *
并使用malloc
in 分配空间main
.
在代码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
}
Run Code Online (Sandbox Code Playgroud)
代码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?)
}
Run Code Online (Sandbox Code Playgroud)
Aus*_*oke 10
在您要分配的第二个示例a
中b
,表示正在分配a.p
(char*
)b.p
.因此,修改指向的内存b.p
也会修改指向的内存a.p
,因为它们都指向内存中的相同位置.
在第一个示例中,您有两个单独的数组.分配a
到b
副本的每个char
阵列中a.p
来b.p
-的内存,这些块的一部分struct
,他们不是指向内存中的特定部分.b.p
在这种情况下的任何修改都不会影响,a.p
因为它们完全不相关.
归档时间: |
|
查看次数: |
677 次 |
最近记录: |