개인공부(113)
-
C언어 - 포인터 연산 총정리
#define _CRT_SECURE_NO_WARNINGS #include int main() { int arr[5] = { 100,200,300,400,500 }; int* ptr1, * ptr2, * ptr3; ptr1 = arr; // Assignment // 포인터에 주소를 대입할수있다. // 포인터 변수는 변수명 자체가 주소와 비슷한 기능을 한다. // 만약 arr이 배열이 아니라 일반적인 변수였다면(int i같은) // &i 처럼 &를 붙여서 주소를 가져와야 한다. printf("%p %d %p : ptr1, *ptr1, &ptr1\n", ptr1, *ptr1, &ptr1); // dereferencing, Taking a pointer // 포인터 앞쪽에 *를 붙이면 변수에 저장된 주소로 가서..
2020.11.12 -
C언어 - 배열을 함수에게 전달해주는 방법
한 데이터를 여러 함수에서 쓸때 매번 데이터를 복사 해갈경우 시간과 메모리 낭비가 엄청나다. 그 문제를 해결하기 위해 데이터가 첫주소를 알려주어 하나의 메모리로, 하나의 데이터 덩어리로 다른 함수들이 사용할수 있다. 함수는 배열을 배열로 받지 않고 포인터로 받는다. #define _CRT_SECURE_NO_WARNINGS #include double average(double arr1[], int n ) { // 배열은 통째로 복사해오는게 아니라 // 포인터로 받아온다. printf("Size = %zd in function average\n", sizeof(arr1)); double avg = 0.0; for (int i = 0; i < n; ++i) { avg += arr1[i]; } avg /= (..
2020.11.12 -
C언어 - 2차원 배열과 메모리
3개짜리가 원소가 2개 있다. int arr[2][3] = { {1,2,3,}, {4,5,6} }; // 초기화 방법 1. int arr[2][3] = { 1,2,3,4,5,6 }; // 초기화 방법2. // 배열 출력하는 for문 for (int j = 0; j
2020.11.11 -
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