728x90
반응형
# include <stdio.h>
# include <stdlib.h>
int main()
{
const char *pt1 = "I am a string"; // 포인터변수에 문자열을 사용한다면 const로 상수 선언해서 사용하는 것을 권장. text segment에 있기 때문.
const char *pt2 = "I am a string";
const char *pt3 = "I am a string!!!";
const char arr1[] = "I am a string";
const char arr2[] = "I am a string";
const char arr3[] = "I am a string";
printf("read only data : \t%llu %llu %llu %llu\n",(unsigned long long)pt1,(unsigned long long)pt2,(unsigned long long)pt3,(unsigned long long)"I am a string");
// 글자 하나도 틀리지 않고 같게 포인터에 사용한다면 주소가 같아진다. i am a string처럼 문자열을 주소처럼 사용할 수 있다.
// 하지만 !!!가 붙은 포인터 변수는 주소가 달라진다. 왜냐하면 글자가 다르기 때문에 저장되는 주소가 달라진다.
printf("stack high data : \t%llu %llu %llu\n",(unsigned long long)arr1,(unsigned long long)arr2,(unsigned long long)arr3);
// 배열의 경우 배열 자체가 주소를 가지기 때문에 전부 주소가 다르다.
printf("stack high data : \t%llu %llu %llu\n",(unsigned long long)&pt1,(unsigned long long)&pt2,(unsigned long long)&pt3);
// 데이터의 주소는 사용하는 용도에 따라서 주소가 달라진다.
char *p4 = (char*)malloc(sizeof(char)*100); // 동적 할당
printf("Heap middle \t%llu\n",(unsigned long long)p4);
// 동적 할당 부분의 데이터는 heap 부분 주소가 아예 다른걸 확인 할 수 있다.
return 0;
}
출처 - 인프런 홍정모의 따라하며 배우는 C
728x90
반응형
최근댓글