objective 1 string
문자열의 끝에는 NULL 문자가 들어가야함
널문자에는 NULL,0,*0,'\0' 등이 사용될 수 있음
(int*)0 과 같이 사용되는건 문자열에 말고 실제 널포인터 가
리킬때쓰는듯
strcpy,strcmp,strcat 함수에 대한 소개
strcpy(str1,str2); //str2의 시작주소부터 NULL이 나올때까
지의 문자열을 str1의 시작주소에부터 복사
strcmp(str1,str2); //lexicographical order에 따라
str1,str2의 첫번째 문자부터 차례대로 비교함. 'A'가 'Z'보
다 작음. ASCII 코드 상으로 보면 'A'가 65,'Z'가 90임.
ASCII코드상으로 'a'가 97로 'Z'보다 큼
strcat(str1,str2); //str1의 NULL부터 str2를 이어다가 붙히
는데 str2의 NULL문자까지임
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char* test1 = "_test1";
char test2[5];
char test3[5];
char test4[5];
char test5[5];
test2[0] = 'a';
test2[1] = NULL;
test2[2] = 'b';
test3[0] = 'a';
test3[1] = 0;
test3[2] = 'b';
test4[0] = 'a';
test4[1] = '\0';
test4[2] = 'b';
printf("test2 + test1 = %s%s\n",test2,test1);
printf("test3 + test1 = %s%s\n",test3,test1);
printf("test4 + test1 = %s%s\n",test4,test1);
getchar();
getchar();
return 0;
}
프로그램 출력 결과
test2 + test1 = a_test1
test3 + test1 = a_test1
test4 + test1 = a_test1
objective 2 array
배열은 연속된 데이타임...스트링은 케릭터 배열이다...함수에 인자로 전달될 때
배열의 시작주소를 전달 가능하고 그걸로 수정가능...콜바이벨류
콜바이레퍼런스...대신 키워드를 써서...수정못하게도 가능...다차원 배열 사용가
능...인덱스로 인트나 케릭터가 올 수 있다...인덱스는 레인지를 벗어나지 않아야
된다...배열의 원소가 인덱스로 올 수도 있다
objective 3 pointers
포인터는 주소이다
변수에 & 써서 주소값을 얻을 수 있다
int a = 10;
int *b = &a;
주소에 *를 써서 주소안의 내용을 알 수 있다
int a = 10;
int *b = &a;
printf("%d",*b); // 10
int* a1, *a2, *a3 ,a4 = 10;
a1 = &a4;
a3 = a2 = a1;
이러면 포인터 세개가 같은곳 가리킴(a4)
포인터는 선언시 타입(int, double, char)을 명시해야함
1,4,8바이트 각각 자료형은 사용하는 메모리 공간이 다름
포인터 자체는 4 바이트
사용할 때 형변환이나 void* 같은걸로 다르게 접근할 수 있긴함
배열은 메모리상의 연속된 저장공간이고
포인터는 그냥 메모리의 주소임
대신 주소를 알면 그걸 통해서 다음주소나 이전 주소를 계산 가능하니 배열처럼 사용 가능
함수에 인자를 줄 때 보통 값복사를 해서 주는데
포인터는 주소정보를 값복사해서 주므로 그걸로 배열과 같이 주소정보 활용 가능
다음과 같은 코딩도 가능함
#include <stdio.h>
int func(int a[])
{
a[0] = 10;
}
int main(void)
{
int a = 5;
func(&a);
printf("%d",a); //결과값 10
}
함수 안에서 지역변수로 포인터를 할당하고 포인터를 리턴할 때는 함수가 종료되고 스택안의 메모리가 다 없어질 수 있으니 동적할당 등을 사용하여 하는게 나음
'컴퓨터 과학 & 영상처리 관련 > 자료구조 / 알고리즘' 카테고리의 다른 글
발견적 탐색 알고리즘 (heuristic search algorithm) (0) | 2012.10.28 |
---|---|
map 자료구조 (0) | 2011.12.20 |
중위표기에서 후위표기로의 전환 (0) | 2011.05.29 |
MALLOC (0) | 2011.05.13 |