개인공부/C언어(71)
-
C언어 - 포인터에 대한 포인터(2중 포인터)의 작동 원리
변수를 선언하면 변수를 통해서 메모리 공간을 사용할수 있다. int *ptr = &a; // 주소값을 ptr변수에 저장한다. *ptr = 8; // ptr변수를 *를 붙여 dereferencing(간접접근, 역참조)한다. 저장된 a의 주소값을 찾아 데이터를 가져옴. 이중 포인터는 포인터변수의 주소를 저장할 수 있다. 포인터 변수 앞에도 주소연산자(&)를 붙이면(&ptr) 포인터 변수의 주소를 가져올수있다. 포인터 변수의 주소값을 가져올때는 이중포인터 변수를 사용한다. (**pptr) 출처 : 홍정모의 따라배우는 C언어
2020.11.12 -
C언어 - 배열 매개변수와 const
#define _CRT_SECURE_NO_WARNINGS #include void print_array(const int arr[], const int n) { for (int i = 0; i < n; ++i) printf("%d ", arr[i]); printf("\n"); } void add_value(int arr[],const int n, const int val) { int i; for (i = 0; i < n; i++) arr[i] += val; // 메모리 주소에 직접 값을 넣어주기때문에 // return값이 없어도 return과 비슷한 기능을 한다. } int sum(const int ar[], const int n) { // 배열값이 변하지 않게 const int i; int total ..
2020.11.12 -
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 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