C

· C
void형 포인터 자료형을 지정하지 않은 포인터 변수이다. 자료형을 지정하지 않았다는 것은 곧, 어떤 자료형의 주소라도 저장할 수 있다는 의미이다. void형 포인터는 참조(*) 연산자로 값을 접근하려면 강제 형변환이 필요하다. 형변환의 방법은 아래의 예시 코드와 같다. char c = 3; double d = 3.1; void *vp = NULL; vx = &c; printf("vp가 저장한 값 : %x\n", vp); printf("*vp의 값 : %d\n", *(char*)vp); // 강제 형변환 vp = &d; printf("vp가 저장한 값 : %x\n", vp); printf("*vp의 값 : %lf\n", *(double*)vp); // 강제 형변환 만약 void pointer에 저장된 값..
· C
C언어의 문자 배열에 대해서는 이전에 다룬 적이 있다. [C] C의 문자열, 문자 배열 문자열을 입력받는다고 하였을 때 나는 C에는 파이썬과 같은 것들이 없다고 생각해 반복문을 사용해서 배열[0] 에 문자 하나.. 배열[1] 에 문자 하나.. 이렇게 하곤 했었는데 찾아보니 C에도 문자 cho4u4o.tistory.com C언어에서 문자열이란 문자 배열에 문자 상수 하나씩 하나씩이 저장되어 있는 상태임을 위의 포스팅에서 언급한 바 있다. 문자 상수와 문자 배열 문자 상수 작은 따옴표 내에 포함된 하나의 문자 (%c) 키보드로 표현할 수 있는 영문자, 숫자, 특수 기호 문자 그 자체 문자 배열 문자 상수를 저장하고 있는 배열 배열에 저장된 문자 변경 가능 이렇게 문자 배열에 저장된 문자를 포인터를 통해 접근..
· C
포인터와 1차원 배열 포인터를 배열에 사용할 때 배열 이름은 배열의 시작 주소를 의미한다. int arr[4] = {1, 2, 3, 4}; int *p = arr; 가령 이렇게 배열과 포인터를 선언하고, printf("%x %x", p, &arr[0]); 배열 이름으로 초기화한 포인터 변수 p와 arr[0]의 주소, 즉 배열의 시작 주소를 출력하면 같은 값이 나오게 된다. 이는 결국 p + 0 또한 같다는 의미가 되어, &arr[0] == p == p+0 == arr 이 성립한다. 같은 주소라면 이것이 가리키는 값도 같다는 의미이다. arr[0] == *arr == *(arr + 0) == *p == *(p + 0) == p[0] 결론 &arr[0] == p == p+0 == arr arr[0] == *..
· C
2차원 배열의 포인터식 접근 (주소, 값의 표현) 1차원 배열에서 arr[i] 는 값을 의미했다. 포인터와 1차원 배열 [C] 포인터와 1차원 배열 포인터와 1차원 배열 포인터를 배열에 사용할 때 배열 이름은 배열의 시작 주소를 의미한다. int arr[4] = {1, 2, 3, 4}; int *p = arr; 가령 이렇게 배열과 포인터를 선언하고, printf("%x %x", p, &arr[0]); 배열 cho4u4o.tistory.com 2차원 배열이 1차원 배열과 다르다는 것을 이해할 때 가장 중요한 것은, 2차원 배열에서 arr[i] (== *(arr + i)) 는 값이 아닌 주소라는 점이다. 1차원 배열에서의 것과 다르기 때문에 헷갈릴 수 있어서 중요하다. 2차원 배열은 '열' 의 정보 뿐 아니..
· C
배열 포인터 배열 포인터는 열을 지정할 수 있는 포인터이다. 배열 포인터는 이렇게 생겼다. 자료형 : 배열 포인터 변수가 저장하는 배열의 자료형 배열 포인터 변수의 이름 : * 연산자와 배열 포인터 변수의 이름을 함께 괄호로 묶음 열의 길이 : 배열 포인터 변수가 가리키는 배열의 열의 길이를 지정 배열 포인터 변수의 사용 앞서 살펴본 2차원 배열의 포인터식 접근과 같다. 1차원 포인터 변수와 1차원 배열의 관계처럼 사용할 수 있다. int arr[2][3] = {10, 20, 30, 40, 50, 60}; int (*p)[3] = arr; // p = arr[0][0] printf("%x %x\n", &p[0][0], arr); printf("%d %d", p[0][1], *(*(p + 0) + 1));..
· C
값에 의한 호출과 주소에 의한 호출 포인터와 함수에 대해 다루기 전, 우리가 사용하던 함수의 모양을 다시 살펴보자. int odd_check (int x); void greeting (int x); 포인터와 함수에 대해 공부하기 전 사용하던 함수들은 매개변수로 값을 받을 때, 변수의 값을 복사해서 함수를 호출하였다. 이것이 값에 의한 호출이다. 값에 의한 호출 : 변수의 값을 복사하여 함수를 호출하는 방식 이런 값에 의한 호출 방법의 특징은, 값을 복사해서 함수를 호출하기 때문에 받아온 값을 함수에서 변형하여도, main 함수에 있는 원래의 변수의 값은 그대로라는 것이다. 아래 코드의 예시를 살펴보자. int func (int x, int y); int main () { int a = 10, b = 20..
· C
포인터란? 주소를 저장하는 '변수' 포인터 사용시 장점 메모리 주소를 참조하여 다양한 자료형 변수들의 접근과 조작이 용이함 메모리 주소를 참조하여 배열과 같은 연속된 데이터에 접근과 조작 용이 동적 할당된 메모리 영역에 접근과 조작 용이 포인터 변수의 선언과 사용 자료형 * 포인터 변수 이름 = NULL; (초기화) int *p1 = NULL; // int형 자료의 주소를 저장하는 포인터 변수 char *p2 = NULL; // char형 자료의 주소를 저장하는 포인터 변수 double *p3 = NULL; // double형 자료의 주소를 저장하는 포인터 변수 포인터에도 자료형이 있고, 그 자료형에 알맞는 값만 가리킬 수 있다 사용은 주소 연산자와 참조 연산자를 통해 이루어진다. 주소 연산자 (&) 와..
· C
문자열을 입력받는다고 하였을 때 나는 C에는 파이썬과 같은 것들이 없다고 생각해 반복문을 사용해서 배열[0] 에 문자 하나.. 배열[1] 에 문자 하나.. 이렇게 하곤 했었는데 찾아보니 C에도 문자열을 다룰 수 있는 방법이 있었다 ㅠ 문자열 변수의 선언과 초기화 변수를 사용함에 있어서 선언과 초기화는 굉장히 중요하다. C에는 파이썬처럼 문자열 자체를 하나의 자료형으로 지원하는 것은 없으나 문자열을 "문자배열" 로 나타내는 것이 가능하다고 한다. 따라서 C에서 문자열 변수 == 문자 배열 로 처리한다. 문자열 변수의 선언은 char형 배열의 선언과 같다. char string_name[size]; 크기를 지정한 문자 배열 다음과 같이 사용할 수 있다. char city[9] = "NEW YORK"; cha..
cho4u4o
'C' 카테고리의 글 목록