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언어
'개인공부 > C언어' 카테고리의 다른 글
C언어 - 저장공간의 다섯가지 분류 , 자동변수, 레지스터 변수 (0) | 2020.11.13 |
---|---|
C언어 - 변수의 영역과 연결 상태, 객체의 지속 기간 (0) | 2020.11.13 |
C언어 - 메모리 레이아웃 훑어보기 (0) | 2020.11.12 |
C언어 - 메모리 레이아웃과 문자열 (Memory Layout ) (0) | 2020.11.12 |
C언어 - 문자열을 정의 하는 방법 (0) | 2020.11.12 |