개인공부(113)
-
C언어 - 변수의 영역과 연결 상태, 객체의 지속 기간
#define _CRT_SECURE_NO_WARNINGS #include /* *Variable scopes (Visibility) *- block, function, function prototype, file. * *function prototype은 프로토타입 선언동안. * *function scope( function() 가 block scope{} 처럼 보이기도 한다. * * file 영역은 함수영역 바깥에 선언되면 된다. */ int g_i = 123;//global variable 전역변수 int g_j;// global variable 전역변수 void func1() { g_i++; } void func2() { g_i += 2; } int el;//file scope with extern..
2020.11.13 -
C언어 - 객체(Object)와 식별자(Identifier) , L-value R-value
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를 지명한다(가르킨다). (indire..
2020.11.12 -
C언어 - 메모리 레이아웃 훑어보기
function pointer는 함수 자체의 주소 함수 자체에도 메모리에 저장되어있다. 함수의 주소도 가져올수 있다. 프로그램 코드 자체도 메모리에 올라와야 하고 한번 메모리에 올라오면 프로그램이 끝날때까지 올라와있어야한다. 전역변수는 빨간 박스 안에 들어가있고 프로그램이 끝날때까지 계속 메모리에 머물러 있다. 어떤 프로그램이 어떤 메모리를 쓰고 있다면 다른곳에서 메모리를 쓰지 못하게 막는다. 하지만 프로그램이 쉬고있는 경우 다른 프로그램이 쓸수 있도록 내어줄수있어야 한다.(효율성) 초보입장에선 자신이 쓸 메모리를 항상 쓸수 있게 모든 변수를 전역변수로 선언해버리는것 지역변수는 스택이라는 다른 메모리에 저장된다. 지역변수가 쓰일때만 쓰이고, 쓰이지 않을땐 스택에서 빠진다. 스택은 늘어났다가 불필요하면 줄..
2020.11.12 -
C언어 - 메모리 레이아웃과 문자열 (Memory Layout )
지역변수들이 stack에 쌓인다. 컴파일러가 미리 크기를 알수 있다면 미리 준비를 할수있다. 메모리 크기가 얼마될지 예상이 안될경우 heap이라는 메모리를 사용한다. 초기화된 전역/정적 변수들은 변수들이 어떻게 초기화가 되어야 할지를 미리 알고있다. 컴파일할때 이미 결정되어있기 때문에, 프로그래밍 한 값으로 바로 값이 결정됨 초기화되지 않은 전역/정적 변수들은 0으로 초기화. arr배열자체가 메모리를 가지고 있으니 값을 얼마든지 바꿀수있음. char* str = "Hello, World"; str 포인터는 "Hello, World" 스트링 리터럴이 저장되어 있는 공간을 바꿀 방법이 없다. 문자열 리터럴들은 컴파일때 이미 값이 정해져있다. 읽기 전용으로 들어감. 읽기전용에서 쓰기를 시도하니 운영체제에서 막..
2020.11.12 -
C언어 - 문자열을 정의 하는 방법
남는 공간에 null character를 채워준다. #define _CRT_SECURE_NO_WARNINGS #include #define MESSAGE "A symbolic string contant" #define MAXLENGTH 81 int main() { char words[MAXLENGTH] = "A string in an array"; // char 타입의 배열 // 배열자체가 메모리를 가지고 있다. const char* pt1 = "A point to a string."; // 문자열에 대한 포인터 // 포인터는 어딘가에 저장되어있는 것의 첫번째 주소를 가져오는 것 //puts 함수는 문자열을 출력 puts("Puts() adds a newline at the end:"); // puts(..
2020.11.12 -
C언어 - 복합리터럴과 배열 ( Compound Literals )
#define _CRT_SECURE_NO_WARNINGS #include #define ROWS 3 #define COLS 4 int sum_1d(int arr[], int n); int sum_2d(int arr[][COLS], int rows); int main() { int a = 1; // 1리터럴의 값을 a에 넣는것 3; // Literal 은 기호 없는 상수. 3.14f; int b[2] = { 3,4 }; // 3,4두개의 숫자가 brace로 묶여있고 // b라는 심볼로 인식할수있는 2개짜리 배열에 들어간것. (int[2]) {3, 4};// 기호가 없다, compound literal //int c[2] = (int[2]){3,4}; // Error int arr1[2] = { 1,2 };..
2020.11.12