"C언어 void*"의 두 판 사이의 차이

잔글 (봇: 자동으로 텍스트 교체 (-source +syntaxhighlight))
 
(사용자 2명의 중간 판 7개는 보이지 않습니다)
13번째 줄: 13번째 줄:


===int===
===int===
<source lang='c'>
<syntaxhighlight lang='c' run>
#include<stdio.h>
#include<stdio.h>
int square(int n) {
int square(int n) {
22번째 줄: 22번째 줄:
   printf("%d", square(x)); // 100
   printf("%d", square(x)); // 100
}
}
</source>
</syntaxhighlight>
:int 값 곱셈
:int 값 곱셈


===int*===
===int*===
<source lang='c'>
<syntaxhighlight lang='c' run>
#include<stdio.h>
#include<stdio.h>
int square(int* p) {
int square(int* p) {
35번째 줄: 35번째 줄:
   printf("%d", square(&x)); // 100
   printf("%d", square(&x)); // 100
}
}
</source>
</syntaxhighlight>
:int* (int 포인터) → int (int 값)에 접근하여 곱셈
:int* (int 포인터) → int (int 값)에 접근하여 곱셈


===void*===
===void*===
<source lang='c'>
<syntaxhighlight lang='c' run>
#include<stdio.h>
#include<stdio.h>
int square(void* p) {
int square(void* p) {
48번째 줄: 48번째 줄:
   printf("%d", square(&x)); // 100
   printf("%d", square(&x)); // 100
}
}
</source>
</syntaxhighlight>
:void* (부정형 포인터) → int* (int 포인터) → int (int 값)에 접근하여 곱셈
:void* (부정형 포인터) → int* (int 포인터) → int (int 값)에 접근하여 곱셈


55번째 줄: 55번째 줄:
이번에는 3×3 크기의 2차원 배열을 출력하는 간단한 함수 print()를 구현해본다.
이번에는 3×3 크기의 2차원 배열을 출력하는 간단한 함수 print()를 구현해본다.
===int[][]===
===int[][]===
<source lang='c'>
<syntaxhighlight lang='c' run>
#include<stdio.h>
#include<stdio.h>
void print(int a[3][3]) {
void print(int a[3][3]) {
67번째 줄: 67번째 줄:
   print(arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
   print(arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
}
}
</source>
</syntaxhighlight>


===int*===
===int*===
<source lang='c'>
<syntaxhighlight lang='c' run>
#include<stdio.h>
#include<stdio.h>
void print(int* a) {
void print(int* a) {
82번째 줄: 82번째 줄:
   print((int*)arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
   print((int*)arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
}
}
</source>
</syntaxhighlight>


===void*===
===void*===
<source lang='c'>
<syntaxhighlight lang='c' run>
#include<stdio.h>
#include<stdio.h>
void print(void* a) {
void print(void* a) {
97번째 줄: 97번째 줄:
   print((void*)arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
   print((void*)arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
}
}
</source>
</syntaxhighlight>
<source lang='c'>
<syntaxhighlight lang='c' run>
#include<stdio.h>
#include<stdio.h>
void print(void* a) {
void print(void* a) {
111번째 줄: 111번째 줄:
   print((void*)arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
   print((void*)arr); // 1 2 3 | 4 5 6 | 7 8 9 |  
}
}
</source>
</syntaxhighlight>


==같이 보기==
==같이 보기==
119번째 줄: 119번째 줄:
* [[C언어 3차원 배열 파라미터로 넘기기]]
* [[C언어 3차원 배열 파라미터로 넘기기]]


[[분류: C]]
[[분류:C]]
[[분류: void]]
[[분류:Void]]
[[분류: C언어 포인터]]
[[분류:C 포인터]]

2020년 11월 2일 (월) 02:40 기준 최신판

1 개요[ | ]

void*
void pointer
void 포인터, 보이드 포인터
  • 자료형이 정해지지 않은 포인터
  • 본래의 자료형 정보는 없고 메모리 주소만 알 수 있음
  • 다차원 배열을 넘겨주는 용도로 많이 사용한다.
주소 정보만 받아서 원래의 배열로 재구성할 수 있다. (실습 2의 마지막 예시 참조)
단, 원래의 배열을 재구성하려면, 받는 쪽에서 자료형과 배열의 형태(크기)를 알고 있어야 한다.

2 실습 1[ | ]

제곱을 구하는 간단한 함수 square()를 구현하되, 인수의 자료형을 각각 int, int*, void*로 받는 경우를 생각해보자.

2.1 int[ | ]

#include<stdio.h>
int square(int n) {
    return n*n;
}
int main() {
   int x=10;
   printf("%d", square(x)); // 100
}
int 값 곱셈

2.2 int*[ | ]

#include<stdio.h>
int square(int* p) {
    return (*p)*(*p);
}
int main() {
   int x=10;
   printf("%d", square(&x)); // 100
}
int* (int 포인터) → int (int 값)에 접근하여 곱셈

2.3 void*[ | ]

#include<stdio.h>
int square(void* p) {
    return (*((int*)p))*(*((int*)p));
}
int main() {
   int x=10;
   printf("%d", square(&x)); // 100
}
void* (부정형 포인터) → int* (int 포인터) → int (int 값)에 접근하여 곱셈

3 실습 2[ | ]

이번에는 3×3 크기의 2차원 배열을 출력하는 간단한 함수 print()를 구현해본다.

3.1 int[][][ | ]

#include<stdio.h>
void print(int a[3][3]) {
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) printf("%d ", a[i][j]);
        printf("| ");
    }
}
int main() {
   int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
   print(arr); // 1 2 3 | 4 5 6 | 7 8 9 | 
}

3.2 int*[ | ]

#include<stdio.h>
void print(int* a) {
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) printf("%d ", *(a+i*3+j));
        printf("| ");
    }
}
int main() {
   int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
   print((int*)arr); // 1 2 3 | 4 5 6 | 7 8 9 | 
}

3.3 void*[ | ]

#include<stdio.h>
void print(void* a) {
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) printf("%d ", *((int*)a+i*3+j));
        printf("| ");
    }
}
int main() {
   int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
   print((void*)arr); // 1 2 3 | 4 5 6 | 7 8 9 | 
}
#include<stdio.h>
void print(void* a) {
    int (*b)[3] = a;
    for(int i=0; i<3; i++) {
        for(int j=0; j<3; j++) printf("%d ", b[i][j]);
        printf("| ");
    }
}
int main() {
   int arr[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
   print((void*)arr); // 1 2 3 | 4 5 6 | 7 8 9 | 
}

4 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}