궁금증1 : 컴파일러마다 반응이 다릅니다. 특성인 거죠.. 볼랜드에서 무난히 컴파일 됩니다.
에러 메시지 내용은 int 를 char *와 비교하려고 컨버전 하려는데 바꿀수 없다. 는 내용입니다.
궁금증2 : 3) char* My_strcpy( char* dest, const char* src );
위의 선언은 My_strcpy라는 함수는 char *dest와 const char *src를 받아서 char * 타입의 값을
돌려주는 함수이다. 라는 겁니다. 함수 자체가 포인터로 선언되는 것은 나중에 더 진도 나가면 함수포인터라고
따로 또 나옵니다.(이걸 말하신게 맞는지 모르겠지만..) 함수가 있는 위치를 가리키는 포인터이죠.. 함수포인터로
함수를 나중에 호출하거나 써먹기 위해서 사용합니다.
궁금증3: 처음 공부할 때 혼란스러운 내용 중의 하나입니다. 이건 주의하실게 선언이냐, 사용이냐에 따라 뜻이 조금 달라진다는 것에 유의하시면 좀 더 쉽게 이해하실 수 있습니다. 3번째 라인 처럼 사용되는건 선언입니다. 단순히 변수의 타입이 포인터 이다라는 것이고, 실제 함수내에서 사용될 때 포인터 앞에 *이 붙게 되면 포인터가 가르키는 곳의 내용입니다. 일반적으로 포인터란 어떤 대상이 있는 곳의 주소값을 가지는 변수입니다.
char *dest; 이것은 dest는 char 형 대상의 주소값을 가지는 변수란 뜻입니다.
사용시에 *dest 는 dest의 값이 메모리의 주소이므로 그 주소에 가면 char형이 있다는 겁니다.
그래서 *dest = 'c'; 이렇게 쓸수 있습니다.
혹은 char src[10]; dest = src; 이렇게 하시면 dest의 값은 src의 주소값이 되며, *dest는 src[0]의 내용과 똑같습니다. 단지 표현이 틀릴 뿐입니다.
그래서 포인터를 받은 함수에서 포인터로 기술하기 어려우시다면 []를 사용해서 하셔도 된다는 것이죠.
do
{
*dest++ = *src;
} while( *src++ );
이 내용은
int i=0;
do
{
dest[i] = src[i];
} while(src[i++]);
와 같이 바꿔쓸 수도 있겠지요 혹은
for(int i=0; src[i]; i++) dest[i] = src[i];
로 쓸수도 있지 않겠습니까?
이상입니다.
윤영광 님이 쓰신 글 :
: 에러나고 궁금해서 이렇게 올립니다. 책대로 코딩했는데도 에러가 나네요..
: 문자열 복사 함수 만들다가..
: visual c++ 사용하고 있구요(그래서 그런가??)
: 여튼, 코드는 아래와 같고요..
: KOREA 로 정의된 문자를 string 에 복사하는 함수 My_strcpy() 구현입니다.
:
: __________________________________________
: 1) #include <stdio.h>
: 2) #define KOREA "대한민국"
: 3) char* My_strcpy( char* dest, const char* src );
: 4) void main( void ) {
: 5) char string[100];
: 6)
: 7) My_strcpy( string, KOREA );
: 8)
: 9) puts( string );
: 10) }
: 11)
: 12) char* My_strcpy( char* dest, const char* src ){
: 14) if( dest == (int)NULL || src == (int)NULL )
: 15) { if( *dest != (int)NULL ) *dest = (int)NULL;
: 17) return NULL;
: 18) }
: 19) do
: 10) {
: 20) *dest++ = *src;
: 21) }
: 22) while( *src++ != (int)NULL );
: 23) return dest;
: 24) }
: -----------------------------------------------------
:
: 궁금증1.
: 책대로 했는데 에러가 나네요
: 14번째줄 : error C2446: '==' : no conversion from 'int' to 'char *'
: 14번째줄 : error C2040: '==' : 'char *' differs in levels of indirection from 'int'
: 14번째줄 : error C2040: '==' : 'const char *' differs in levels of indirection from 'int'
: 포인터와 관련된것 같은데...머가 잘못된지는 모르겠네요. 에공~
:
: 궁금증2.
: 포인터의 일반적인 사용에 대해서 궁금한데요..
: 3번째줄처럼 함수자체가 포인터로 선언되는거와 그렇지 않은 것의 차이점이 뭔가요..^^;;
:
: 궁금증3
: 역시 포인터가 궁금한데요..(포인터는 아무래 공부해도 알쏭당쏭하네요~)
: My_strcpy( char* dest, const char* src ) 이렇게 넘어온 'dest' 와 'src' 가
: *dest 일때와 desc 일체 가르키는게 정확히 전자가 '문자'이고 후자가 '문자의 주소'인가요?
|