분류 전체보기(139)
-
C언어 - const와 배열과 포인터
#define _CRT_SECURE_NO_WARNINGS #include int main() { //type qualifiers : const, volatile,... const double PI = 3.14159; //PI = 2.14159; const int arr[5] = { 1,2,3,4,5 }; // const를 붙이면 배열의 각각의 값을 바꿀수없다. // arr[1] = 123; // const붙이면 Not Working const double arr2[4] = { 1.0,2.0,3.0,4.0 }; //arr2[0] = 100.0; const double* const pd = arr2; // *pd = 3.0;// pd[0] = 3.0; arr2[0] = 3.0; // pd[2] = 1024...
2020.11.12 -
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*, double*); int main() { double arr1[5] = { 10,13,12,7,8 }; printf("Avg = %f\n", average(arr1, arr1 + 5); //arr1+5는 정수에 5를 더하는게 아니라 포인터에 5를 더하는것 return 0; } double average(double* start, double* end) { int count = end-start; double avg = 0.0; while (start < end) { // 끝에 도달하게 되면 작업중단 avg += *start++; // start를 dereferencing, 스타트가 가르키는..
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