2014-07-13 2 views
1

저는 C에서 포인터 표기법을 좋아하는데 배열 표기법을 좋아하지만 일부 경우에는 알아낼 수 없습니다. 나는 다음과 같은 코드 및 main포인터 표기법 대 배열 표기법

/*converts arguemnt to number using atoi()*/ 
#include <stdio.h> 
#include <stdlib.h> 

int main(int argc, char **argv) { 
    int i, times; 

    if(argc < 2 || (times=atoi(argv[1])) < 1) { 
     printf("Usage :%s positive-number\n", argv[0]); 
    } else { 
     for(i = 0; i < times; i++) { 
      puts("Hello"); 
     } 
    } 
    return 0; 
} 

가 어떻게 포인터 표기법 argv[1]argv[0]을 표현하는 것의 몸을 가지고? 당신이 다음 argv[1]

*(argv + 1) 

것 포인터 연산을 의미하지만 argv[1]와 함께 갈 것입니다 경우

*(p + n) 
+0

당신이 포인터 연산을 의미합니까? – haccks

답변

2

그냥 재미있는 사실을 지적하는

*(arr + i); 
*(i + arr); 
arr[i]; 
i[arr]; // This last one is rather interesting now isn't it. 
+0

심지어 상수와 함께 작동합니다 : arr [1] == 1 [arr] –

+0

그건 깔끔한데, 나는 마지막으로 실제로 작동한다고 생각하지 않았을거야. – user3833610

0
p[n] 

은 동일합니다.

+0

붐, 고마워. 시간이 다되면 일단 받아 들일 것입니다. – user3833610

4

argv[i]은 전 이상 후자를 선호하는 이유를 정말 상상할 수없는 *(argv + i)

에 해당합니다.

이있는 경우와 배열 (int arr[5]) 또는 포인터의 모든 다음과 동일합니다 :