字符数组和指针之间的区别

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

在您要分配的第二个示例ab,表示正在分配a.p(char*)b.p.因此,修改指向的内存b.p也会修改指向的内存a.p,因为它们都指向内存中的相同位置.

在第一个示例中,您有两个单独的数组.分配ab 副本的每个char阵列中a.pb.p-的内存,这些块的一部分struct,他们不是指向内存中的特定部分.b.p在这种情况下的任何修改都不会影响,a.p因为它们完全不相关.