몽상실현개발주의

[따배씨] 12.2 객체와 식별자, L-value 와 R-value 본문

Language/C

[따배씨] 12.2 객체와 식별자, L-value 와 R-value

migrationArc 2021. 6. 13. 15:37

[따배씨] 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
  • 배열 내부의 값(문자) 은 변경 가능

 

 


이 글의 모든 사진과 내용의 출처는 홍정모 교수님께 있음을 알려드립니다.

http://blog.naver.com/atelierjpro

 

실리콘 밸리의 프로그래머 : 네이버 블로그

안녕하세요! 홍정모 블로그에 오신 것을 환영합니다. 주로 프로그래밍 관련 메모 용도로 사용합니다. 강의 수강하시는 분들은 홍정모 연구소 카페로 오세요.

blog.naver.com

http://www.inflearn.com/course/following-c

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com

Comments