2011-11-11 4 views
2

나는 현재 포인터를 배우고있다.포인터를 가리키는 포인터?

#include <cstdio> 
#include <cstring> 
#include <cstdlib> 

using namespace std; 

int f1(int **w){ 
    for (int i=0;i<2;i++){ 
     for (int j=0;j<10;j++){ 
      w[i][j]=10; 
      printf("%d ",w[i][j]); 
     } 
     printf("\n"); 
    } 
    printf("----\n"); 
} 

int main() { 


    int **w = (int **) malloc(sizeof(int*)*2); 
    for (int i=0;i<2;i++) 
     w[i] = (int*)malloc(sizeof(int)*10); 

    for (int i=0;i<2;i++){ 
     for (int j=0;j<10;j++){ 
      w[i][j]=i*10 + j; 
      printf("%d ",w[i][j]); 
     } 
     printf("\n"); 
    } 
    printf("---\n"); 
    f1(w); 
     for (int i=0;i<2;i++){ 
     for (int j=0;j<10;j++){ 
      w[i][j]=i*10 + j; 
      printf("%d ",w[i][j]); 
     } 
     printf("\n"); 
    } 

    return 0; 
} 

그래서,이 코드를

이 여기에 출력됩니다 : 나는 궁금하네요

0 1 2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 
--- 
10 10 10 10 10 10 10 10 10 10 
10 10 10 10 10 10 10 10 10 10 
---- 
0 1 2 3 4 5 6 7 8 9 10 
11 12 13 14 15 16 17 18 19 

, 왜 배열 값 (마지막 두 행을 볼 수는) 10 다릅니다은? .
올바른 포인터를 보내지는 않겠지 만,이 경우 10 ... 10이라는 배열이 어디에 저장되어 있는지 궁금합니다.

감사

+1

당신은 명시 적으로'[내가] [j]가 = 내가 10 + J를 * 승으로 그 가치를 재 할당,'당신이 전에 인쇄 그들 ... 뭐가 불분명하니? –

답변

1

프로그램이 당신이 그것을 프로그래밍 한 정확히 무엇을하고있는 것 같습니다.

에서 F1 함수는 다른 장소

w[i][j]=i*10 + j; 
0
for (int i=0;i<2;i++){ 
    for (int j=0;j<10;j++){ 
     w[i][j]=i*10 + j; 
     printf("%d ",w[i][j]); 
    } 
    printf("\n"); 
} 

이 광고와 배열로 설정하고로 설정 10

w[i][j]=10; 

모든 값 설정 : W- 을 [I] [j] = i * 10 + j;

변수 i가 너무 elemements 2의 어레이에 대한 0 또는 1 :

0*10 + 0 = 0... 
0*10 + 9 = 9... 
1*10 + 0 = 10... 
1*10 + 9 = 19 

이 마지막 세트의 출력의 전체 범위를 차지한다.

0

출력이 잘못 있어야

그것뿐만해야

:

0 1 2 3 4 5 6 7 8 9 
10 11 12 13 14 15 16 17 18 19 
관련 문제