Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- server
- Algorithm
- graph
- 백준
- 따라하며 배우는 C언어
- sorting
- dfs
- 인프런
- C
- BASIC
- web
- greedy
- Python
- 생활코딩
- 정수론
- Algospot
- 따배씨
- BOJ
- C언어
- BFS
- 종만북
- DP
- String
- udemy
- 따라하면서 배우는 C언어
- php
- JavaScript
- Math
- Cleancode
- programmers
Archives
- Today
- Total
몽상실현개발주의
[따배씨] 12.2 객체와 식별자, L-value 와 R-value 본문
따배씨 - 따라하며 배우는 C언어
12강 Storage Classes, Linkage and Memory Management
12.2 객체 Object 와 식별자 Identifier, L-value 와 R-value
#include <stdio.h>
int main(){
/*
Object
- "An Object is simply a block of memory that can sotre a value."
- Object has more developed meaning in C++ and Object Oriented Programming
Identifiers
- Names of variables, function, macros, amd other entities
*/
int var_name = 3; // creates an object called "var_name".
int* pt = &var_name; // pt is an identifier.
*pt = 1; // *pt is not an identifier. *pt designates an object.
int arr[100]; // arr is an identifer.
arr[0] = 7; // arr[0] is an object
/*
lvalue is expression "referring" to an object.
refer : 참조 자,
referring : 참조, 또 다른 이름처럼 사용
L-value : left side of and assignment
R-value : right side, variable, constant, expression
*/
var_name = 3; // modifiable lvalue
pt = &var_name; // modifiable lvalue
int* ptr = arr;
*pt = 7; // *pt is not an identifier but and modifiable lvalue expression
int *ptr2 = arr + 2 * var_name; // address rvalue
*(arr + 2 * var_name) = 456; // lvalue expression
const char* str = "Constant string"; // str is a modeifiable lavalue
str = "Second string"; // "Constant string" = "Second String" // impossible
// str[0] = 'A'; Error
char str2[] = "String in an array";
//str2[] = "Second string"; Error
str2[0] = 'A'; // OK
return 0;
}
- Object - 객체
- C 언어에서는 값을 저장하는 메모리 공간을 가지고 있으면 Object
- OOP 언어에서는 C 언어의 Object 개념을 확장
- Identifier - 식별자
- 이름 - 변수의 이름, 함수의 이름 등
int var_name = 3;
- int 형이 저장되도록 할당된 메모리 공간에 3이라는 값을 복사해서 넣어줌
- 메모리 공간에 접근 시 var_name 라는 이름을 통해서, Object 를 직접 사용하는 것 처럼 작동
*pt = 1;
- *pt 는 표현식으로서, Object 를 가리킴
- Identifier 가 아님 / pt 는 Identifer
int arr[100];
- arr 은 배열의 첫번째 주소 이므로, 메모리 공간을 갖는 Object 는 아님
arr[0] = 7;
- arr[0] 는 메모리 공간을 사용할 수 있으므로, Object
*(arr + 2 * var_name) = 456;
- '*' (indirection operator) 를 붙여 줌으로써, L-value expression 으로 사용 / 주소값
const char* str = "Constant string";
- 포인터로 선언된 str 은 문자열 상수 "Constant string" 의 주소값이 저장됨
str = "Second string";
- str 은 문자열 상수의 주소값이 변경 가능하므로 새로운 문자열 대입 가능
// str[0] = 'A'; Error
- 문자열 상수는 Read-Only 이기 때문에 문자열의 내용을 수정 할 수 없음
char str2[] = "String in an array";
- 배열로 선언된 str2 는 문자열 각각의 문자를 저장하는 배열을 만들어 값을 저장
//str2[] = "Second string"; Error
- 배열로 선언 되었기 때문에, 메모리 크기에 대한 변경이 불가능하여 새로운 문자열 대입 불가능
str2[0] = 'A'; // OK
- 배열 내부의 값(문자) 은 변경 가능
이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.
'Language > C' 카테고리의 다른 글
[따배씨] 12.4 저장 공간의 다섯 가지 분류 (0) | 2021.06.13 |
---|---|
[따배씨] 12.3 변수의 영역과 연결 상태, 객체의 지속 기간 (0) | 2021.06.13 |
[따배씨] 12.1 메모리 레이아웃 훑어보기 (0) | 2021.06.13 |
[따배씨] 11.11 문자열을 숫자로 바꾸는 방법들 (0) | 2021.06.10 |
[따배씨] 11.10 명령줄 인수 (0) | 2021.06.10 |
Comments