我有以下代碼:堆和棧的問題,對於結構 - C編程
#include <stdlib.h>
#include <stdio.h>
struct B
{
int _arr[5];
};
struct A
{
struct B *_pb_arr;
};
int main()
{
int i,j;
struct B b;
struct B *pb = (struct B*)malloc(sizeof (struct B));
*pb = b;
struct A a;
a._pb_arr = (struct B*)malloc(sizeof (struct B)*2);
a._pb_arr[0] = b; //first question
a._pb_arr[1] = *pb; //second question
for (i=0;i<2;++i)
{
for (j=0;j<5;++j)
{
a._pb_arr[i]._arr[j] = i;
}
}
struct A a2 = a;
for (i=0;i<2;++i)
{
for (j=0;j<5;++j)
{
printf ("%d, ", a2._pb_arr[i]._arr[j]);
}
}
return 0;
}
我的問題是:爲什麼:a._pb_arr[0] = b;
分配是堆棧。 和下一行:a._pb_arr[1] = *pb
該分配在堆上?
好像a.pb_arr
被分配在堆上,每個任務也在堆上。
這取決於您的意思是「分配在(堆棧|堆)」上。 (這不是標準術語。)第一項任務是將結構從堆棧複製到堆中,而第二項任務是將結構從堆的一部分複製到另一部分。 – ruakh 2012-02-07 18:20:38
你的問題並不完全清楚,但你想知道爲什麼通過賦值將結構總是複製到堆中,即使最初在堆棧中定義了一個結構? – 2012-02-07 18:21:17
所以我低估了你們兩個我認爲...在這兩種情況下,它被複制到堆權利? – 2012-02-07 18:22:55