#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char a[]="rose"; // ok
int main(void) {
char b[]="rose"; //ok
char *p ="grace"; //ok, p에 상수 grace의 주소가 들어간다.
// 포인터는 데이터 영역(data segment)에 저장되므로 수정이 가능하나(주소값을 바꿔는것과 같이)
// grace는 문자열 상수이므로 text영역(text segment)에 저장된다. 그래서 수정 권한이 없다.
char buff[]="grace"; //buff Array에 grace 할당
char* p2= buff; //p2가 buff를 가리키도록 주소를 넣는다.
p2[0] = 't';
a[0]='n'; //ok
b[0]='n'; //ok
//p[0]='t'; //not ok, p는 grace라는 상수 char*를 가리키는데 값 변경을 시도해서 Err
//p=b; //ok, p값은 pointer이기때문에 b의 주소를 주면 b를 가리키게된다.(==p가 nose를 갖는 Array인 b를 가리킨다)
//p="changeNewAddressInTextSegment"; //ok, p가 가리키는 text영역에서 수정이 아닌 새로운 char*를 가리키게 바꾸는건 가능하다
printf("a=%s \n", a);
printf("b=%s \n", b);
printf("p=%s \n", p);
{
char buff[]="grace"; //buff Array에 grace 할당
char* p2= buff; //p2가 buff를 가리키도록 주소를 넣는다.
printf("변경 전 p2=%s \n", p2);
p2[0] = 't'; //p2가 가리키는 변수 buff Array의 0번째 값을 바꾼다.
printf("변경 후 p2=%s \n", p2);
printf("p2를 변경 후 buff값=%s \n", buff);
}
return 0;
}
'소프트웨어 > C/C++' 카테고리의 다른 글
C/C++] DLL 만들기 및 적용(dll export, dll import) (3) | 2017.02.23 |
---|---|
c] 프로세스 복제 fork (0) | 2014.05.31 |
cpp] thread 만들기 (0) | 2014.05.26 |
c] 문자열에서 char 찾기. strchr (0) | 2014.04.06 |
c/c++] CPP에서 strtok사용하기_ string객체를 char*로 변환 (0) | 2013.10.18 |
c/c++] 객체 배열 동적생성시 메모리반환 (0) | 2013.10.11 |
c/c++] Header와 소스코드분리 (0) | 2013.10.04 |