포인터 7

Cfaq5

Q 6.20 정적 또는 동적으로 할당된 다차원 배열을 함수에 전달할때, 서로 구별하지 않고 쓸 수 있는 방법이 있을까요? Answer 완벽한 방법은 없습니다. 다음 선언이 있다고 할 때: int array[NROWS][NCOLUMNS]; int **array1; /* ragged */ int **array2; /* contiguous */ int *array3; /* "flattened" */ int (*array4)[NCOLUMNS]; int (*array5)[NROWS][NCOLUMNS] 포인터들은 질문 6.16에 나온 것처럼 초기화되어 있다고 가정하고 함수 선 언은 다음과 같다고 가정합니다: void f1a(int a[][NCOLUMNS], int nrows, int ncolumns); void f..

Cfaq4

Q 6.1 소스 파일에 char a[6]이라고 정의하고 extern char *a라고 선언해 두 었는데 왜 동작하지 않을까요? Answer 소스 파일에 정의한 것은 문자(char)로 이루어진 배열입니다. 그리고 선언 한 것은 문자를 가리키는 포인터입니다. 따라서 선언과 정의가 일치하지 않 는 경우입니다. 일반적으로, T 타입을 가리키는 포인터(pointer to type T) 의 타입은 T 타입의 배열(array of type T)과 다릅니다. 대신 extern char a[]을 사용하기 바랍니다. Q 6.4 그럼 왜 함수의 formal parameter로 배열과 포인터 선언을 마음대로 바꿔 쓸 수 있다는 것일까요? Answer 편의상 그런 것입니다. 배열 이름은 즉시 포인터로 바뀌기 때문에4, 배열은 ..

포인터 연산

int *ptr; int num[] = {2,4,6,8,10}; ptr = num; *ptr++; *ptr++; (*ptr)++; (*ptr)++; 예문이 위와 같을 때 *ptr의 값과 후치연산 후 ptr의 주소 값 이동은? 결과는 드래그 2(주소 : num[0] + 1) 4(주소 : num[0] + 1 + 1) 7(주소 : num[0] + 1 + 1) -> 후치연산 후, 주소 연산이 아니라 포인터가 가르키는 값이 증가했다. 8(주소 : num[0] + 1 + 1) -> 후치연산 후, 주소 연산이 아니라 포인터가 가르키는 값이 증가했다.

포인터 이정도는 알아야 된다

(1) int *var[5]; (2) int (*var)[5]; (3) long *var(long, long); (4) long (*var)(long, long); (5) double (*var(double(*)[3]))[3]; 정답은 드래그~ 해설 (1) int 형 자료에 대한 포인터를 5개를 갖는 배열 (2) int형 자료 5개를 가지는 배열에 대한 포인터 (3) long 형 인수 두개를 받아 long 형 자료에 대한 포인터를 반환하는 함수 (4) long 형 인수 두개를 받아 long 형 자료를 반환하는 함수에 대한 포인터 (5) double 형 자료를 3개 갖는 배열에 대한 포인터를 인수로 받고, double 형 자료를 3개를 갖는 배열에 대한 포인터를 반환하는 함수

포인터 배열? 배열 포인터?

int *p[4] : 포인터 배열 int (*p)[4] : 배열 포인터 int *p[4] 랑 int (*p)[4] 은 다른 것입니다. * 보다 [] 가 우선 순위가 높습니다. !!!! + 배열과 포인터와의 관계 1차 배열 과 그 포인터 : int a [4]; int (*p) ; => p = a; 실행 시 문제없음 2차 배열 과 그 포인터 : int a [3][4]; int (*p)[4] ; => p = a; 실행 시 문제없음 3차 배열 과 그 포인터 : int a [2][3][4]; int (*p)[3][4] ; => p = a; 실행 시 문제없음

포인터와 참조자

//---------------------------------------------------------------------------------- //항 목 | 포인터 | 참조자 | 비 고 //---------------------------------------------------------------------------------- //Null 값 | 허용 |허용안함 | int *p; // 가능 // | | | int &r; // 불가능 //---------------------------------------------------------------------------------- //주소값 재 대입 | 허용 |허용안함 | p=&a // 포인터 p에 변수 a의 주소 대입 (가능) // ..