Как сделать три указателя абзаца короткими? - PullRequest
2 голосов
/ 30 октября 2011

Исходный вопрос - проблема моего замешательства, извините.

#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" вместе в непрерывное пространство памяти?

1 Ответ

3 голосов
/ 30 октября 2011

Теперь, когда вы отредактировали требуемый вывод, на вопрос можно ответить.

Измените цикл печати следующим образом:

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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...