这是我代码的简化版。我有一个输出的问题。我怎样才能解决这个问题?

问题描述 投票:1回答:1
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

作为输出。另外,我不想使用静态分配。

c pointers memory dynamic
1个回答
3
投票

动态分配的指针数组的两个指针(元素)在赋值后都指向同一个对象行。

s1[0] = row;
//...
s1[1] = row;

所以,当前时刻存储在指针行所指向的数组中的内容就指向这两个指针s1[0]和s1[1]。

你需要将指针s1[1]设置为其他数组。

© www.soinside.com 2019 - 2024. All rights reserved.