C : Comparison of pointers and array

m_ngyeong·2024년 10월 14일
0

C

목록 보기
9/16
post-thumbnail

Comparison of pointers and array


Comparison of pointers

C 언어에서 포인터 변수끼리의 비교는 그들이 가르키는 메모리 주소를 비교한다. 즉, 두 포인터가 같은 메모리 위치를 가리키고 있는지를 확인하는 것이다. 포인터가 동일한 메모리 주소를 가리키고 있는지를 확인하려면 주소값을 비교해야 한다.

예제:

#include <stdio.h>

int main() {
    int a = 5, b = 10;
    int *ptr1 = &a;
    int *ptr2 = &a;
    int *ptr3 = &b;

    // 포인터 주소값 비교
    if (ptr1 == ptr2) {
        printf("ptr1 and ptr2 point to the same address.\n");
    } else {
        printf("ptr1 and ptr2 point to different addresses.\n");
    }

    if (ptr1 == ptr3) {
        printf("ptr1 and ptr3 point to the same address.\n");
    } else {
        printf("ptr1 and ptr3 point to different addresses.\n");
    }

    return 0;
}
  • ptr1ptr2는 둘 다 변수 a의 주소를 가리키므로, ptr1 == ptr2는 참(True).
  • ptr1ptr3는 각각 변수 ab의 주소를 가리키므로, ptr1 == ptr3는 거짓(False).

출력 결과:

ptr1 and ptr2 point to the same address.
ptr1 and ptr3 point to different addresses.

Comparison of Array

배열은 기본적으로 첫 번째 요소의 주소값을 나타내는 특성을 가진다. 하지만 배열 이름 자체는 포인터가 아니기에 배열의 이름은 상수 포인터처럼 동작하여 배열의 시작 주소를 가리킨다.

배열을 비교할 때 배열은 그 배열의 첫 번째 요소의 주소를 나타내므로, 주소값을 비교하게 된다. 하지만 배열의 값(내용)을 직접 비교하는 것은 불가능하고, 배열의 요소 하나하나를 순회하며 값을 비교해야 한다.

예제:

int arr1[] = {1, 2, 3};
int arr2[] = {1, 2, 3};

if (arr1 == arr2) {
    printf("arr1 and arr2 are the same address.\n");
} else {
    printf("arr1 and arr2 are different addresses.\n");
}
  • arr1 == arr2는 두 배열의 주소값을 비교하는 것이며, 배열은 서로 다른 메모리 공간에 할당되기 때문에 arr1arr2는 다른 주소를 가리킴.

출력 결과:

arr1 and arr2 are different addresses.

배열의 값 비교

배열의 값을 비교하고 싶다면, 직접 반복문을 통해 요소를 하나씩 비교하거나 memcmp 같은 함수를 사용할 수 있다.

int same = 1;
for (int i = 0; i < 3; i++) {
    if (arr1[i] != arr2[i]) {
        same = 0;
        break;
    }
}

if (same) {
    printf("arr1과 arr2의 값이 같습니다.\n");
} else {
    printf("arr1과 arr2의 값이 다릅니다.\n");
}


profile
사용자 경험 향상과 지속적인 성장을 추구하는 프론트엔드 개발자 ʚȉɞ

0개의 댓글