C 입문 - 긱스포긱스 C Pointer Basics

조해빈·2023년 4월 1일
0

C

목록 보기
2/7
post-thumbnail

C 입문 - 긱스포긱스 C Pointer Basics

https://www.geeksforgeeks.org/c-language-2-gq/pointers-gq/

퀴즈를 풀기 전 제가 c를 공부한 내용은 해당 깃에 올라가 있습니다.
https://github.com/h-b-cho/CBasic.git

2

값 바꾸기의 공식과도 같은 대표적인 예제이다.

9

C에서 배열 매개 변수는 항상 포인터로 처리됩니다. 따라서 다음 두 문장은 같은 의미를 갖습니다.

void fun(int arr[])
void fun(int *arr)

위에서 []는 함수가 배열을 받고자 하고 있음을 분명히 하기 위해 사용됐지만, 아무 것도 변경하지는 않습니다. 사람들은 []을 판독기가 의도된 매개변수 유형을 명확하게 알 수 있도록 가독성을 위해서만 사용합니다.

결론은 배열 매개 변수에 size of를 사용해서는 안 되며 배열 크기(또는 길이)에 대한 별도의 매개 변수를 fun()으로 전달해야 한다는 것입니다.

즉 위에서 arr_size는 포인터 크기와 정수 크기의 비율을 포함하며, 이 비율은 컴파일러에 따라 달라집니다.


void fun(int arr[], size_t arr_size) 
{ 
    int i; 
    for (i = 0; i < arr_size; i++) {
        printf("%d ", arr[i]); 
    }
} 

int main() 
{ 
    int i; 
    int arr[] = {10, 20 ,30, 40}; 
    size_t n = sizeof(arr)/sizeof(arr[0]);    // Use of sizeof is fine here 
    fun(arr, n); 
    return 0; 
}

///Output: 10 20 30 40

11

/* p points to i and q points to j */
void f(int *p, int *q) 
{ 
  p = q;    /* p also points to j now */
 *p = 2;   /* Value of j is changed to 2 now */
}

두 포인터가 같은 값을 가리킬 수 있다.

12


S1: 컴파일 오류를 생성합니다.
S2: 전달된 인수에 따라 런타임에 분할 오류를 생성할 수 있습니다.
S3: 프로세스에 액세스할 수 있는 메모리 위치에 저장된 정수를 참조하는 모든 입력 포인터에 대해 스왑 절차를 올바르게 구현합니다.
S4: 일부 유효한 입력 포인터에 대해 스왑 절차를 올바르게 구현합니다.
S5: 정수와 포인터를 추가하거나 뺄 수 있습니다.

13

  **ppz += 1  
  
  /* z is changed to 5*/
  z  = **ppz; 
  
  /* changes c to 7, x is not changed */
  *py += 2; 
  
   /* y is changed to 7*/
  y = *py;    
  
  /* x is incremented by 3 */
   x += 3;    
  
  /* return 7 + 7 + 5*/
  return x + y + z;

우선, 참고로 c는 결과적으로 5가 된다.
x는 c의 변화 과정에서부터 영향받지 않는다. x는 c와 별개이기 때문이다. x는 c의 복사본이고 x의 주소는 c와 별개이다.

15

.
.
.
.
.
.

profile
UE5 공부하는 블로그로 거처를 옮겼습니다!

0개의 댓글