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
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기