2016-06-20 3 views
-1

좋아요, 그래서이 이상한 행동을 발견했을 때 C로 어지럽 혔습니다. main 함수에서 배열의 크기를 얻으려면 sizeof 연산자를 사용하고 배열을 다른 함수에 전달하고 sizeof 연산자를 다시 사용하여 초기 값과 다른 수를 얻었습니다. 처음으로 테스트 할 때 올바른 값인 12를 얻었고 두 번째로 테스트했을 때 4를 얻었습니다. 왜 그런지 이해하지 못합니다.C++에서 값이 바뀌고 왜 그런지 알지 못합니다

 #include <stdio.h> 
    #include <ctype.h> 

    int canPrint(char ch) { return isalpha(ch) || isblank(ch); } 
    void print_Letters(char arg) 
    { 
     if (canPrint(arg))printf("%c==%d \n",arg,arg); 
    } 
    void printarg(char ch[]) 
    { 
     unsigned int value = sizeof(ch);//returns 4 
     for (int i = 0;i<value; i++) 
     { 
      print_Letters(ch[i]); 
     } 
    } 
    int main(int argc, char *argv[]) 
    { 
     char something[]="work please"; 
     printf("%d \n",sizeof(char));// return 1 
     printf("%d \n",sizeof(something));//returns 12 
     printarg(something); 
     char ch; 
     scanf_s(" %c",&ch);//used to stop program so that I can read results 
     return 0; 
    } 
+2

질문은 C 말한다,하지만 당신은 C++ 태그가 있습니다. 어떤거야? – Thebluefish

+0

코드를 제대로 포맷하도록 요청하는 것이 너무 어려울까요? (당신이 다른 사람들에게 그것을 읽으려고하기 때문에) – davmac

+0

죄송합니다. C++ – bordenE

답변

2

void printarg(char ch[])void printarg(char* ch) 실제로 동일합니다. 즉, 배열은 자연스럽게 함수 인수로 값을 전달하지 않지만 인수는 포인터입니다.

따라서 함수에서 sizeof(ch)을 수행하면 포인터 크기가 반환됩니다.

+0

설명해 주셔서 감사합니다. – bordenE

0

char* (C에서 문자열의 종류) 작업이 같은 루프를 사용하는 것이 좋습니다 :

 #include <string.h> 

    void printarg(char ch[]) 
    { 
     for (int i = 0;i<strlen(ch); i++) 
     { 
      print_Letters(ch[i]); 
     } 
    } 

또는

 void printarg(char ch[]) 
    { 
     for (int i = 0;ch[i] > 0; i++) 
     { 
      print_Letters(ch[i]); 
     } 
    } 
+0

답변 주셔서 감사합니다 – bordenE

+0

This for (int i = 0 ; i user4581301