Ani*_*rya 8 c c++ arrays struct pointers
我在两个代码中做同样的事情.
在代码1中:我使用了a char *并使用mallocin 分配空间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 次 |
| 最近记录: |