最初的问题是我的困惑问题,对不起。
#include <stdio.h>
#include <stdlib.h>
void func(int **p_in1, int **p_in2, int **p_in3){
int *p_temp1 = (int *)malloc(5*sizeof(int));
int *p_temp2 = (int *)malloc(5*sizeof(int));
int *p_temp3 = (int *)malloc(5*sizeof(int));
int i;
for(i = 0; i < 5; i++){
p_temp1[i] = i+1;
p_temp2[i] = i+2;
p_temp3[i] = i+3;
}
*p_in1 = p_temp1;
*p_in2 = p_temp2;
*p_in3 = p_temp3;
}
int main(){
int *p_out1 = NULL, *p_out2 = NULL, *p_out3 =NULL;
int i;
func(&p_out1, &p_out2, &p_out3);
for(i = 0; i < 5; i++){
printf("%d", p_out1[i]);
printf(" ");
printf("%d", p_out2[i]);
printf(" ");
printf("%d\n", p_out3[i]);
}
free(p_out1);
free(p_out2);
free(p_out3);
p_out1 = NULL;
p_out2 = NULL;
p_out3 = NULL;
return 0;
}
我想通过使用一个段来使“func”更短。如何将“p_in1,p_in2,p_in3”放在连续的内存空间中?
答案 0 :(得分:3)
现在您已经在输出中编辑了所需的内容,可以回答问题。
将您的打印循环更改为:
for(i = 0; i < 5; i++){
printf("%d", p_out1[i]);
}
printf(" ");
for(i = 0; i < 5; i++){
printf("%d", p_out2[i]);
}
printf(" ");
for(i = 0; i < 5; i++){
printf("%d", p_out3[i]);
}
这将输出:
12345 23456 34567
在原始代码中,您正在交错3个数组。你想要的是分别打印每一个。
编辑:至于您的第二个问题,您可以将p_out1
,p_out2
和p_out1
合并到一个数组中。
这是完成此操作的代码:
void func(int **p_in){
int *p_temp1 = (int *)malloc(5*sizeof(int));
int *p_temp2 = (int *)malloc(5*sizeof(int));
int *p_temp3 = (int *)malloc(5*sizeof(int));
int i;
for(i = 0; i < 5; i++){
p_temp1[i] = i+1;
p_temp2[i] = i+2;
p_temp3[i] = i+3;
}
p_in[0] = p_temp1;
p_in[1] = p_temp2;
p_in[2] = p_temp3;
}
int main(){
int *p_out[3];
func(p_out);
int i;
for(i = 0; i < 5; i++){
printf("%d", p_out[0][i]);
}
printf(" ");
for(i = 0; i < 5; i++){
printf("%d", p_out[1][i]);
}
printf(" ");
for(i = 0; i < 5; i++){
printf("%d", p_out[2][i]);
}
free(p_out[0]);
free(p_out[1]);
free(p_out[2]);
return 0;
}