-2
struct a {
   int *p;
   int c;
} a1,a2;

void fun(struct a);

int main()
{

    a1.p=malloc(4);
    *(a1.p)=10;
    a1.c=20;

    fun(a1);
    printf("%d\n",*(a1.p));
    return 0;
}

void fun(struct a temp)
{   
    a2=temp;
    *(a2.p)=30;
    printf("%d\n",*(a2.p));
}

我有一个这样的程序,现在我的问题是....当我们分配 *(a2.p)=30; 这将影响 *(a1.p) 值您将如何避免?即,即使我更改了 *(a2.p) 值但我不想影响 *(a1.p) 值 ypu 将如何做? 请建议我

提前致谢

4

1 回答 1

1

你需要这样做:

a2.p = malloc( sizeof( int ) ); // << Note this.

if ( a2.p == NULL ) {
  // We ran out of memory in the memory pool. Do some error handling.
}

*( a2.p ) = 30;

...请注意,a1.p两者a2.p都指向同一个内存块。因此,a2.p在改变其值之前更改位置点。

在旁边:

  • 不要malloc固定大小(你malloc( 4 )应该是malloc( sizeof( int ) ))。
于 2013-08-15T18:33:24.970 回答