2011-04-20 3 views
1

누군가이 프로그램이 작동하지 않는 이유를 말해 줄 수 있습니까?문자열 및 포인터 관련 문제

1>c:\users\\documents\visual studio 2010\projects\sssdsdsds\sssdsdsds\sssdsdsds.cpp(4): error C2440: 'initializing' : cannot convert from 'char' to 'char *'

하지만이 같은 코드를 작성하는 경우 :

int main() 
{ 
    char *num = 'h'; 
    printf("%c", num); 
    return 0; 
} 

내가 오류는

int main() 
{ 
    char num = 'h'; 
    printf("%c", num); 
    return 0; 
} 

를이 일하고있다.

+2

왜 * 작동 할 것으로 기대합니까? '*'는 무엇을 의미한다고 생각하니, 왜 거기에 넣는 것이 중요하지 않다고 생각하십니까? –

답변

0

첫 번째 경우에서 num을 char에 대한 포인터로 선언했습니다. 두 번째 경우에는 char로 선언합니다. 각각의 경우 변수에 char을 할당합니다. char에 대한 포인터에 char을 할당 할 수 없기 때문에 오류가 발생합니다.

0

'H'= 샤아 "H"= 널이 당신에게 할당하려고 여기

5
char *num = 'h'; 

, 'h'char이다 편지를, 작동 문자열

int main() 
{ 
    char *num = "h"; 
    printf("%s", num); // <= here change c to s if you want to print out string 
    return 0; 
} 

종료 a char*. 두 가지 유형이 같지 않으므로 위에 나온 문제가 발생합니다.

이 작동합니다 : 당신이 char* 만들어 따옴표 (")를 사용하고 여기에

char *num = "h"; 

의 차이입니다.

이것은 또한 작동합니다 :

char letter = 'h'; 
char* ptrToLetter = &letter; 

당신은 서로 다른 구성 할 정확히 이해하는 C에서 포인터에 읽어해야합니다.

2

char *은 단일 문자 char과 같은 것이 아니라 char에 대한 포인터입니다.

char *이있는 경우 '이 아닌 "으로 초기화해야합니다.

또한, printf()에서 서식 표현 :

  • %schar *
  • %c 사용되는 전용 char위한 것이다. 사람으로
0

은 당신이 당신이 포인터에 값을 제공하기 위해 노력하고 있기 때문에

char *num = 'h' 

컴파일러가 당신에게 오류를 제공 쓸 때, 말했다. 포인터는 이전에 정의한 다른 변수의 메모리 주소 만 저장하는 변수입니다.

& 

를 그리고 요소가 지적으로 변수의 포인터 타입에 coerent해야합니다 그러나 연산자 변수의 메모리 주소에 액세스 할 수 있습니다. 예를 들어, 여기 당신이 제대로 PTR 정의하는 방법이다 : 당신이 다른 문제보다 구체적인 질문을 시도 할 경우, 당신이 어딘가에 공부하는 방법이 모든 작동 방식 ptrs 구현 될 수, 어쨌든

int value = 5; 

//defining a Ptr to value 

int *ptr_value = &value; 

//by now, ptr_value stores value's address 

을 :)

0

을 사용하는 경우 char 변수에 대한 포인터를 선언하고 있습니다. 이 포인터는 포인터가 가리키는 변수의 주소를 유지합니다. 간단한 단어에서

, 당신은 단순히 char num='h'로 문자 변수를 선언으로, 다음 변수 num이 값 h을 개최한다 그래서 당신은 printf("%c",num) 사용하여 인쇄하는 경우, 당신은 h으로 출력을 얻을 것이다.

그러나 변수를 포인터로 선언하면 char *num과 같이 실제로 문자 값을 가질 수 없습니다. 일부 문자 변수의 주소 만 저장할 수 있습니다.

예를 들어 여기

void main() 
{ 
    char a='h'; 
    char *b; 
    b=&a; 
    printf("%c",a); 
    printf("%c",b); 
    printf("%u",b); 
} 

아래의 코드를 보면, 우리는 하나의 문자 변수 a 한 문자 포인터 b 있습니다. 이제 변수 a은 우리가 모르는 메모리 어딘가에있을 수 있습니다. ah 값을 가지며 &aaddress of a in memory을 의미합니다. b=&a 문구는 a의 메모리 주소를 b에 할당합니다. b은 포인터로 선언되므로 주소를 보유 할 수 있습니다.

상태 printf("%c",b)은 가비지 값을 인쇄합니다.

printf("%u",b)은 변수 a의 주소를 메모리에 인쇄합니다.

따라서 char numchar *num 사이에 차이가 있습니다. 먼저 포인터에 대해 읽어야합니다. 그들은 정상적인 변수와 다르므로 매우 조심스럽게 사용해야합니다.