C언어 - 객체(Object)와 식별자(Identifier) , L-value R-value

2020. 11. 12. 22:52개인공부/C언어

Object란?

값을 저장할수 있는 메모리 덩어리이다.

Object는 C++에서 더 발전된 의미를 가진다 그리고 객체지향이다 (OOP)

 

Identifiers (식별자)

- 변수, 함수, 매크로 그리고 엔티티를 위한 이름이다.

 

 

 

int var_name = 3;

변수이름을 통해서 접근하는 메모리 공간이 Object

변수 이름 var_name 이 Identifier(식별자)

 

 

int var_name =3 ; 
//creates an object called 'var_name'.

int* pt = &var_name; 
// pt는 식별자이다. 포인터 변수도 자기주소를 가진다. 다른 변수의 주소 '값'을 저장할뿐

*pt = 1; 			
// *pt 는 식별자가 아니다. *pt는 object를 지명한다(가르킨다). (indirection)

int arr[100]; 		
// arr은 식별자이다.(배열에대한 이름), 하지만 object가 아니다
// arr은 첫원소에 대한 주소일뿐.
// arr[0]은 object이다.

arr[0] = 7;			

var_name = 3; 
// 변수 이름이 가르키고 있는 메모리 공간에다 3을 복사해서 넣는 것.

temp = 1 + 2; 
// 1+2는 object가 아니다. cpu에서 연산뒤 temp에 대입할 뿐 고로 1+2는 메모리공간이 없다.

pt = &var_name; 
// 포인터에 주소값을 대입하고있다.

int* ptr = arr; 
// arr이 알려주는 주소값을 포인터 ptr에 대입한다.

*pt = 7; 
// *pt는 식별자가 아니지만 수정가능한 lvalue 표현식.

int *ptr2 = arr + 2 * var_name; 
// 주소 rvalue

*(arr + 2 * var_name) = 456;	
// lvalue 표현식

const char* str = "Constant string"		
//str 은 수정가능한 lvalue.

str = "Second string";	
// "Constant string" = "Second String" // 불가능

char str2[] = "String in an array" 
// array로서 따로 메모리를 할당받고, str2라는 identifier가
///"String in an array"라는 문자열이 저장되기에 충분한 메모리공간에
// 대한 식별자 역활을 함.

str2[0] = 'A';	// ok

 

 

 

 

 

 출처 : 홍정모의 따라배우는 C언어