2012-07-25 3 views
0

나는 C 언어에 대한 초보자입니다. 그러나이 코드가 출력에 'A'을주는 이유가 무엇인지 이해할 수있었습니다.C로 작성된 다음 프로그램의 출력은 어떻게됩니까?

나를 괴롭히는 한가지는 printf 문에 배열 이름 p입니다.이 p는 컴파일러에서 처리되고 있습니까?

행 번호 5 이후에 p가 문자 배열 "% c \ n"으로 어떻게 대체 될 수 있습니까?

나는 이것이이 토끼를 유감스럽게 생각하는 바보 같은 질문이라는 것을 알고있다.

누구나 내가이 개념을 이해하는 데 도움이 될 수 있습니까?

line1:  #include<stdio.h> 
line2:  int main() 
line3:  { 
line4:   char p[]="%d\n"; 
line5:   p[1]='c'; 
line6:   printf(p,65); 
line7:   return 0; 
      } 
+0

. 5? after line 5? – Useless

답변

6

printf()의 첫 번째 인수는 a const char*에는 형식 지정자가 포함되어 있습니다. 문자열 리터럴로 보는 것이 더 일반적입니다.

문자열을 포함하는 변수를 사용할 수 있습니다.

p[1] = 'c'의 할당 %c%d보다는 문자를 인쇄 printf() 지시로 표준 출력에 기록되는 ((65A 십진 값은 그대로) 문자 A 결과 버퍼 pcd 변경 숫자 값이 인쇄됩니다).

+0

고마워요 선생님. C 기술을 강화하려면 어떻게해야합니까? 깊은 방법으로 C를 이해하는 데 도움이되는 링크가 있습니까? – kTiwari

+0

@krishnaChandra, 문제 없습니다. 가장 좋은 방법은 추천 도서를 얻는 것입니다. 이것은 좋은 출발점이 될 것입니다 : http://en.wikipedia.org/wiki/The_C_Programming_Language. – hmjd

2

배열의 오프셋 # 1 (두 번째 문자)에있는 문자 만 전체 배열을 바꾸는 것이 아닙니다. 형식 문자열로 사용할 때 정수 65를 대문자 라틴 문자 A로 포맷하는 "% c \ n"이되도록 'c'로 바꾸는 것입니다.

+0

은 어떨까요? printf() 함수에서 형식 문자열을 사용하는 대신 arry 이름을 사용하는 것이 유효한 c 문입니다. – kTiwari

+0

물론 함수에 대한 매개 변수이므로 "this this like"와 같은 명시 적 문자열 또는 그러한 문자열이있는 메모리에 대한 포인터 'p'와 같이 위치합니다. 그냥 문자의 배열을 사용하는 경우 ** 그것의 끝에 ** '\ 0'마커로 끝내야합니다 기억하십시오 – YePhIcK

0

아래 설명 : 상기 실행 된 후

char p[]="%d\n"; 

, P를 포함한다 -> "% d 개 \ n"

여기
line5:   p[1]='c'; 

는 P 이제 "% C \ 없음"이 될 것이다, 0을 기준으로 한 색인 생성의 1 문자를 변경하려고합니다.

printf("%c\n",65) 

또는

printf("%c\n",'A') 

은 그러므로 당신이 의 출력을 얻을 라인 6에서

1

가 :
printf(p,65);
변경됩니다

line6:   printf(p,65); 

은 동등하다 ~
printf("%c\n",65); 아스키 값 'A'는 65입니다.
http://www.asciitable.com/

0
 #include<stdio.h> 
     int main() 
     { 
      char p[]="%d\n"; #This is stored at p[1] 
      p[1]='c'   # d is replaced by c 
      printf(p,65);  # p is taken as p[1] and is replaced by "%c\n" 
      return 0; 
     } 

출력 : A #의 ASCII 값 65

당신은 (66) 출력으로 값이 등등 'B'와됩니다 주면 줄 앞에 p``에 무엇

관련 문제