[질문] 포인터 사용시...일관성이 없는건지요?
글쓴이: hurryon / 작성시간: 수, 2003/05/07 - 4:21오전
아직은 하수라...이것이 일관성이 없어 보입니다. 혹은 배열의 특징때문에
이렇게 되는지요?
#include <stdio.h>
int main(void)
{
char name[] = "leejonghyouk";
char *nick = "hurryon";
char *ptr;
ptr = name;
printf("%s\n", name);
printf("%s\n", nick);
printf("%s\n", ptr);
printf("%s\n", *ptr); /* 세그먼테이션 에러 */
return(0);
}
그리고...
#include <stdio.h>
int main(void)
{
int a = 10;
int *a_ptr;
a_ptr = &
printf("%d\n", a);
printf("%d\n", a_ptr); /* 잘못된 값 */
printf("%d\n", *a_ptr);
return(0);
}
위의 2개의 코드을 보시면 알겠지만 문자을 사용할때는 그냥
ptr을 사용해야 하고 정수을 사용할때는 *a_ptr 을 사용해야 제대로
된 결과값을 내 놓습니다. 왜 이런지요?
제가 알고 있는 포인터의 상식은
#include <stdio.h>
int main(void)
{
int a = 10;
int *a_ptr;
a_ptr = &
}
위와 같을때...
*a_ptr --> a_ptr 포인터가 가르키고 있는 a라는 변수의 값
a_ptr --> 포인터 변수(보통 주소가 들어감)
&a_ptr --> a_ptr 포인터 변수의 주소
이렇게 알고 있습니다. 왜 문자을 사용할때와 정수을 사용할때는 위와같이
포인터 사용에 일관성(?)이 없는지요?
[/code]
Forums:


printf 문의 %s %d 의 차이가 아닐까요?
printf("%s\n", 12345); 이렇게 하면..
12345번 주소에 있는 값을 화면에 출력하는 것이고.
printf("%d\n", 12345); 하면
12345라는 값을 출력하라는 %s 와 %d 의 차이 같습니다.
^^
포인터에 일관성이 없는게 아닙니다.관점의 차이인데, 문자(charac
포인터에 일관성이 없는게 아닙니다.
관점의 차이인데, 문자(character)나 정수(integer)에 쓰는 포인터는 사용 방법이 같습니다.
int i = 123; int *ip = & char ch = 'a'; char *cp = & printf("%d, %c\n", *ip, *cp);문자열(string)은 C 언어에서 문자의 배열(array of character)로 취급되기 때문에 다른 것이죠. 예를 들어:
char s[] = "hello"; char *p = s; printf("%s\n", p); /* "hello\n"를 출력 */ printf("%s\n", &p[0]); /* 위와 같음 */다시 말하지만 문자열은 배열입니다. 그리고 배열의 특성상, 배열의 이름만 쓸 경우, 배열 0번째 요소를 가리키는 주소가 되므로, 위에서 `p'는 `&p[0]'과 같습니다.
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
[code:1]int main(){
int main() { int x, *p_x; char name[]="who"; char *p_name; x = 10; p_x = &x ; p_name = name; // 일반적인 포인터 사용 printf("&x = %p\n", &x); printf("&x = %p\n", p_x); printf("x = %d\n", x); printf("x = %d\n", *p_x); // 문자열에서의 포인터 사용 printf("&name = %p\n", name); printf("&name = %p\n", p_name); // 문자열을 출력할 때는(%s) 주소를 넘겨줌. printf("name = %s\n", name); printf("name = %s\n", p_name); // 문자를 출력할 때는(%c) (아스키)값을 넘겨줌. printf("name[0] = %c\n", name[0]); printf("name[0] = %c\n", p_name[0]); printf("name[0] = %c\n", *p_name); // == *(p_name + 0) printf("name[1] = %c\n", name[1]); printf("name[1] = %c\n", p_name[1]); printf("name[1] = %c\n", *(p_name+1)); return 0; }===================================================
중요한건 얼마나 아느냐가 아니라 그것에 대한 열정이다.
포인터 변수와 일반 변수는 조금 목적이 틀립니다. 예를 들어서,
포인터 변수와 일반 변수는 조금 목적이 틀립니다.
예를 들어서, int abc 는 어떤 정수값을 넣기 위한 공간을 할당하고
int *abc 는 int 형 정수를 넣을 공간을 가리키기 위해서 사용합니다.
그리고 포인터 abc가 가리키는 곳의 값을 가져오기 위해서는 *abc처럼
앞에 * 표를 사용합니다.
다시 한번 정리하면,
int abc = 3; 정수값을 저장
int *p = & p에는 abc의 메모리 주소가 들어간다.
*p; 는 이제 그 메모리 주소안에 있는 실제 값 3을 가리키게 된다.
그럼 고운 하루
=========================
CharSyam ^^ --- 고운 하루
=========================
댓글 달기