개인공부/C언어(71)
-
C언어 - 포인터와 배열
int main(){ int arr[10]; const int num = sizeof(arr) / sizeof(arr[0]); for(int i=0; i < num; i++) arr[i] = (i+1) * 100; int *ptr = arr; printf("%p %p %p\n", ptr, arr, &arr[0]); ptr += 2; printf("%p %p %p\n", ptr, arr + 2, &arr[2]); //Note : arr += 2; //invalid return 0; } 동적할당을 받은 메모리를 배열처럼 포인터를 통해서 사용을 실전에서 더 많이 사용 배열을 직접 포인터 연산을 할수는 없다. arr += 2; 처럼 쓸수 없다. int* ptr = arr; for (int i =0 ; i< nu..
2020.11.11 -
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