【发布时间】:2020-08-23 10:06:35
【问题描述】:
int* row;
row = (int*)(malloc)(5 * sizeof(int));
int **s1;
s1=(int**)(malloc)(2*sizeof(row));
row[0] = 1;
row[1] = 2;
row[2] = 1;
row[3] = 2;
row[4] = 1;
s1[0] = row;
row[0] = 3;
row[1] = 3;
row[2] = 3;
row[3] = 4;
row[4] = 3;
s1[1] = row;
for (int i = 0; i < 5; i++) printf("%d", s1[0][i]);
printf("\n");
for (int i = 0; i < 5; i++) printf("%d", s1[1][i]);
我的输出:
33343
33343
但我想看看
12121
33343
作为输出。另外,我不想使用静态分配。
【问题讨论】:
-
s1[0] = row是对row的引用。然后操作行的内容并将第二个引用分配给s1[1]。s1[0]和s1[1]都指向同一个东西 (row)。 -
顺便说一句:不要在 C 中强制转换 malloc() !!! :-)
-
换一种说法(已经指出)...
s1[0]和s1[1]指向内存中相同的数字数组,地址为row。所以s1[0]和s1[1]总是指向同一个数字列表。如果您希望您的代码按预期工作,例如,您需要将row1和row2分开。您可以动态分配它们。