분류 전체보기(139)
-
C언어 - 포인터의 산술 연산
int* ptr = 0; printf("%p %lld\n", ptr, (long long) ptr); ptr += 1; printf("%p %lld\n", ptr, (long long) ptr); 결과값 : 00000000 0 // ptr +1 이후 00000004 4 char* ptr = 0; printf("%p %lld\n", ptr, (long long) ptr); ptr += 1; printf("%p %lld\n", ptr, (long long) ptr); //int* ptr 대신 char* ptr 로 바꾸면 결과값 : 00000000 0 // ptr +1 이후 00000001 1 double* ptr = 0; 00000000 0 // ptr +1 이후 00000008 8 long long* pt..
2020.11.11 -
C언어 - 배열의 기본적인 사용방법
#define _CRT_SECURE_NO_WARNINGS #include #define MONTHS 12 // symbolic constant, macro int main() { /* Basic usage */ int high[MONTHS] = { 2,5,11,18,23,27,29,30,26,20,12,4 }; for (int i = 0; i < MONTHS; ++i) printf("%d ", high[i]); printf("\n"); float avg = 0.0; for (int i = 0; i < MONTHS; ++i) avg += high[i]; printf("Average = %f\n", avg / (float)MONTHS); high[0] = 1; high[1] = 2; //high = { 1,..
2020.11.11 -
C언어 - 배열과 메모리
위와 같이 선언하려면 변수명을 일일이 지정해주는것도 문제지만 for문을 어떻게 돌릴것인가? 변수가 100만개 된다면? 이런 문제를 배열로 해결할수있다. 배열 선언 방법은 1.자료형을 앞에 적어주고(int 같은) 2 .변수명을 명시해주고 (high, low) 3. 그 뒤에 몇개의 배열이 들어오는지 정해준다 ( [12] ) 4. 들어갈 값은 {} 안에 넣어준다. arr를 선언하면 연속된 메모리 공간을 할당받는다. 실수형 저장 index에 0이 들어오면 첫번째 주소로 들어옴. index에 1이 들어오면 첫번째 주소로부터 자료형 사이즈만큼 칸을 옮긴다(int형이니 4바이트만큼) &는 address-of operator(포인터)인데 &arr[0]과 &(arr[0])에서 () 소괄호의 우선순위가 &보다 크기때문에 ..
2020.11.11 -
C언어 - NULL 포인터와 런타임 에러
int main() { int a = 1234; // 메모리에 공간을 가지게 되면서 object가 된다. //printf("%p\n", &a); //printf("%d\n", a); int* ptr = &a; // 포인터변수를 초기화 안해주면 쓰레기값을 가지고 메모리 공간을 차지한다. printf("%p\n", ptr); printf("%d\n", *ptr); } 결과값 000000017FCFFA34 1234 #define _CRT_SECURE_NO_WARNINGS #include int main() { int* ptr = 1234; // 포인터변수를 초기화 안해주면 쓰레기값을 가지고 메모리 공간을 차지한다. // *ptr이 가리키는 주소값 1234로 가려고 하니 지정된게 없다. // 고로 컴파일 에러가..
2020.11.11 -
C언어 - 포인터의 기본적인 사용 방법
int main() { int a, b; a = 123; int *a_ptr; // * : asterisk a_ptr = &a; // & : address-of operator printf("%d %d %p\n", a, *a_ptr, a_ptr); return 0; } 출력 값: 123 123 0000002AE31EFB04 a : 123 *a_ptr : 123 a_ptr : 0000002AE31EFB04 주소값은 실행때마다 달라진다. *a_ptr의 값이 123인 이유는 a_ptr의 주소로 가서 값을 읽어와서 이다. #define _CRT_SECURE_NO_WARNINGS #include int main() { int a, b; a = 123; int *a_ptr; // * : asterisk a_ptr ..
2020.11.11 -
C언어 : 포인터의 작동원리
드디어 왔다.. 내가 C언어를 공부하는 이유.. 제발 골수까지 빨아먹어 이해하고 싶다. int a; 메모리주소를 가지고 있는 a와 그 메모리가 얼마나 공간을 차지할것이냐 정하는 자료형 int (4 bytes) a = 7; //a라는 변수에 7을 대입한다. 실제 컴퓨터 내부에서는 a라는 변수의 주소 128로 시작해서 131에 끝난다. 그 공간에 7이라는 데이터를 저장. a를 불러오고 b를 불러오면 cpu내의 임시공간에 저장되고 연산된다. 15라는 연산값이 나오면 cpu 임시공간에 저장되어 있다가 c의 메모리주소로 가서 4바이트치 메모리에 결과값 15를 저장한다. 내부적으로 변수가 주소를 사용하고 있다면, 그주소를 실제로 알고 싶다면 어떻게 해야 할까? 주소 연산자를 사용한다! &가 붙으면 단항연산자로 실행..
2020.11.11