본문 바로가기

포인터4

[C언어] 배열과 포인터 사이의 관계 - 2 (포인터 - 4) 저번 포스트에서 배열과 포인터의 관계를 끝내보려했지만... 생각보다 내용이 많아서 끊고 2편으로 가기로 했다. [C언어] 배열과 포인터 사이의 관계 - 1 (포인터 - 3) Ⅰ. 배열과 포인터 배열의 각 원소들은 메모리 상에 연속적으로 위치해 있게 된다. 즉, int형 배열을 선언을 하면 각 원소들은 4바이트씩을 차지한체로 줄지어서 놓여있게 된다는 의미이다. 우리 jikim08.tistory.com Ⅰ. 배열 이름의 주소값 이전에도 설명했듯이 배열의 이름은 sizeof연산자와 주소값 연산자(&)를 사용할 때를 제외하고는 배열의 첫번째 원소를 가리키는 포인터로 타입변환된다. 그런데 sizeof는 어떤 부분이 다른지 이미 알고 있지만 &연산자를 사용하면 무엇이 달라지는지 아직 모른다. 우선 다음 예제를 살펴.. 2022. 7. 10.
[C언어] 배열과 포인터 사이의 관계 - 1 (포인터 - 3) Ⅰ. 배열과 포인터 배열의 각 원소들은 메모리 상에 연속적으로 위치해 있게 된다. 즉, int형 배열을 선언을 하면 각 원소들은 4바이트씩을 차지한체로 줄지어서 놓여있게 된다는 의미이다. 우리는 이전에 포인터의 덧셈을 어떻게 하는지 보았고, int형 데이터를 가리키는 포인터 p에 1을 더하면 4바이트가 더해진다는 사실을 알고 있다. 그런데 배열은 메모리 상 연속적이기 때문에 arr[0]을 가리키는 포인터가 p라면 arr[1]을 가리키는 포인터는 p+1이 된다. #include int main(){ int arr[3] = {1,2,3}; int *p = &arr[0]; printf("%p %p\n", p, &arr[0]); printf("%p %p", p+1, &arr[1]); return 0; } 000.. 2022. 7. 8.
[C언어] 상수 포인터와 포인터의 연산(포인터 - 2) Ⅰ.상수포인터 우리는 절대 값이 변하지 않을 것 같은 변수를 상수로 만들어 주기 위해 const를 사용한다. const를 사용하면 변수를 상수로 만들어서 중간에 해당 변수의 값을 바꿀 수 없도록 만들어 줄 수 있다. 예를 들어 const int a = 3; a = 4; 이 경우 오류가 발생한다. a는 상수라서 바꿀 수 없는 값인데 4로 바꾸려 시도했기 때문에 오류가 발생하는 것이다. const int a = 3; a = 3; 이 경우에도 물론 오류가 발생한다. a의 값은 바뀌지 않았음에도 바뀔 가능성이 있었기 때문에 오류가 생기게 되는 것이다. a에 무슨 값이 들어가는지는 상관이 없이 바뀔 가능성이 있다면 오류가 생긴다. 때문에 절대로 바뀌지 않을 값에는 항상 const를 붙여서 상수로 만들어주는 습관을.. 2022. 7. 5.
[C언어] 포인터에 대해 이해하기(포인터 - 1) Ⅰ.포인터를 이해하기 앞서 우리가 저장하는 모든 데이터는 메모리 상의 공간에 저장되게 된다. 예를 들어 int형 변수를 만들어 값을 저장하면 4바이트짜리 공간에 4바이트짜리 데이터를 저장하는 식으로 처리된다. 이러한 공간들을 구분하기 위해 컴퓨터 내에서 메모리 상의 공간마다 주소가 붙어있게 된다. 포인터는 이러한 주소값들을 저장하기 위해 만들어진 변수이다. 결국 포인터라는게 int, char, float와 같은 자료형들과 다른게 아닌 '변수'라는 점을 기억하자. 특별히 데이터의 주소값을 저장하는 변수. 그래서 int형 변수 a에 2를 저장했다가 이후에 3을 저장하는게 가능하듯이 포인터도 a라는 변수를 가리켰다가 b라는 변수를 가리켰다가 하며 바뀔 수 있다. int a; a=2; a=3;//a값이 2에서 .. 2022. 7. 3.