c로 배우는 자료구조 - c언어 기초문법 리뷰

참고자료

동영상 주소

1. 포인터

  • 컴퓨터의 메모리는 데이터를 보관하는 장소
  • 바이트 (8 bits) 단위로 주소가 지정됨
  • 모든 변수는 주소를 가짐

  • 포인터는 메모리 주소를 값으로 가지는 변수이다. 포인터 변수는 다음과 같이 선언된다.
    type-name * variable-name;
    
  • variable-name은 선언된 포인터 변수의 이름이며, *는 variable-name이 포인터 변수임을 표시하고, type-name은 포인터 변수 variable-name에 저장될 주소에 저장될 데이터의 유형을 지정한다.
int * ptr; // 정수형 포인터 변수 ptr 선언
  • 연산자 &는 변수로부터 그 변수의 주소를 추출하는 연산자이다.
int c = 12;
int *p;
p = &c;

변수명 앞에 등장하면 포인터 변수는 하나의 기호로서 쓰여진다. 하지만 아래의 일반적인 연산에서 포인터 변수가 앞에 등장하면. 그 포인터 변수가 저장하고 있는 주소, 그 주소에 저장된 값이나 자리를 의미하게 된다.

int x=1, y=2;
int * ip;
ip - &x;

y = *ip; // ip라는 포인터 변수가 값으로 가지고 있는 주소에 저장된 값
*ip = 0; //

data structure 1-1

2. 포인터와 배열

  • 포인터와 배열은 매우 긴밀히 연관되어 있다
  • int a[10];
  • 배열의 이름은 배열의 시작 주소를 저장하는 포인터 변수이다. (단 그 값을 변경할 수 없음)
#include <stdio.h>
#include <string.h>

int calculate_sum(int *array);

int main(){
	int sum, i, average;
    
    int num[10];
    
    for (i=0; i<10; i++)
    scanf("%d", &num[i]);
    
    sum = calculate_sum(num);
    
    average = sum / 10;
    printf("%d\n",average);
    return 0;
    
}

int calcaulate_sum(int * array)
{
     int sum , i;
     sum = 0;
     for ( i=0; i<10; i++)

        sum = sum + *(array + i);

     return sum;
}


int calcaulate_sum(int array[])
{
     int sum , i;
     sum = 0;
     for ( i=0; i<10; i++)

        sum = sum + array[i];

     return sum;
}

포인터 arithmetic

  • *a와 a[0]은 동일한 의미이다.
  • 또한 a[1]은 *(a+1)과 동일하고, a[i]는 *(a+i)와 동일하다

data structure1-2

int data[] = {1,2,3};

int *p = &data[0];

printf("%d \n",p);
//변수 p의 값 즉 배열 데이터의 첫번째 메모리 주소값

printf("%d \n",p+1);
//위에 나온 값에 +4가 되어 나옴 정수형 포인터변수이기 때문에 
0%