2011-10-30 54 views
2

原來的問題是我的困惑問題,對不起。如何使三個指針短?

#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

輸出什麼,你得到的,什麼是你期待? – Mat

+0

在這裏工作:http://ideone.com/0uKo7。它爲您打印什麼? – jpalecek

+0

你可以發佈預期的輸出和接收到的輸出嗎? – Ivan

回答

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_out2p_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; 
}