본문 바로가기

반응형

분류 전체보기

(136)
[C언어] 배열의 크기 구하기 * 출처: 코딩도장 36.4 배열의 크기 구하기 배열의 크기를 알아서 계산하도록 만든다. 이미 선언된 배열의 크기(요소의 개수)를 구한다. 이때 sizeof 연산자를 사용한다. ※ 배열의 크기를 구할 때는 전체 공간을 요소의 크기로 나눈다. ※ 배열의 크기와 인덱스 C언어는 인덱스가 배열의 범위를 벗어났는지 검사하지 않으므로 프로그래머가 직접 신경 써야한다. 배열의 크기(요소 개수)를 변수에 저장해두고, 배열에 접근하기 전에 접근하려 하는 인덱스가 (요소 개수 - 1)을 넘지 않는지 확인하는 것도 좋다.
[C언어] 다양한 경우의 수로 배열 선언하기 워낙 경우가 다양하고 변용이 잘 되기 때문에 주의할 점에 유의해서 사용할 때 헷갈릴 때마다 시도해보는 것이 나을 것 같다. 주의할 점 1. ','의 사용(0으로 저장되는가 / 쓰레기값으로 저장되는가 / 컴파일 에러인가) 2. 인덱스 범위 3. 지정한 인덱스에 값이 할당 되어 있는가 4. 쓰레기 값과 0 값의 구분 ▷ 아래에 대표적인 몇 가지 유형에 대해서 작성해보았다. 참고만 하자. 1. 크기 O - 요소에 ',' 사용 시 초기화하지 않은 요소에 대해서 0 할당 됨 2. 크기 X 초기화 시 ',' 사용 가능....? (부정확) 그러나 ','를 이용해 채운 값에 0이 저장되지 않는다. (sizeof 연산자로 확인 가능) 하지만, 요소에 값이 할당 되어 있는가, 없는가에 따라 컴파일 에러 발생 여부 갈린다...
[C언어] 배열 개념: 배열을 선언하고 요소에 접근하기 * 출처: 코딩도장 36.0 배열 사용하기, 36.1 배열을 선언하고 요소에 접근하기, 36.2 배열을 0으로 초기화하기 배열은 같은 자료형의 변수를 일렬로 늘어놓은 형태이다. 반복문과 결합하여 사용하면 연속적이고 반복되는 값을 쉽게 처리할 수 있다. 변수 이름 뒤에 []을 붙이고 크기를 설정한다. 부가적으로 값을 초기화할 때는 {}을 사용한다. ※ 배열을 선언하면서 값을 초기화할 때, {} 안의 값 개수는 배열의 크기보다 작아도 됨. 그러나 크면 안 됨. ※ {}로 배열에 값을 저장하는 것은 배열을 선언할 때만 가능하다. (이미 선언된 배열에는 사용할 수 없다.) 배열의 각 요소에 접근하려면, 배열 변수명 뒤 [] 안에 각 요소의 인덱스를 지정해주면 된다. ※ 배열 선언과 배열 인덱스 배열을 선언할 때..
[C언어] 배열을 선언할 때 배열의 크기를 생략할 수 있다. 배열을 선언할 때 값을 초기화한다면 배열의 크기를 생략할 수 있다. (초기화 하지 않으면 생략할 수 없다.)
[C언어] 흔하게 발생하는 잘못된 포인터 사용 * 출처: 코딩도장 34.7 잘못된 포인터 사용 * 출처: 최유경 교수님 C 프로그래밍 포인터 수업자료 ▶ 1. 포인터 변수에 직접 값을 입력하는 경우 포인터는 메모리 주소를 저장하는 용도이다. 따라서 값을 직접 저장하면 안 된다. 메모리에서 0x100은 잘못된 주솟값이므로 제대로 실행되지 않는다. 때문에 이 상태에서 numPtr을 역참조하여 메모리 주소에 접근해봐야 에러만 발생한다. 아래와 같은 오류 메시지가 발생한다. - E0144: "int" 형식의 값을 사용하여 "int *" 형식의 엔터티를 초기화할 수 없습니다. - C2440: '초기화 중': 'int'에서 'int *'(으)로 변환할 수 없습니다. ※ 정수 계열 형식에서 포인터 형식으로 변환하려면 reinterpret_cast, C 스타일 캐..
[C언어] 포인터 개념 (6): 이중 포인터 * 출처: 코딩도장 34.6 이중 포인터 사용하기 지금까지 다룬 것은 변수의 포인터이다. (변수의 메모리 주소를 저장) 이제부터 다루는 것은 포인터의 메모리 주소를 저장하는 포인터의 포인터를 사용하는 법이다. 포인터를 선언할 때, *를 두 번 사용하면 포인터의 포인터, 즉 이중 포인터를 선언할 수 있다. 포인터도 변수이므로 메모리 주소를 구할 수 있다. 하지만 특수하게, 포인터의 메모리 주소는 일반 포인터에 저장할 수 없고 이중 포인터에 저장해야 한다. (int **numPtr2; 를 영어로 pointer to pointer to int라 한다.) 이중 포인터 numPtr2를 끝까지 따라가서 실제 값을 가져오려면 변수 앞에 역참조 연산자를 두 번 사용하면 된다. 포인터를 선언할 때 *의 개수에 따라서 삼..
[C언어] 포인터 개념 (5): 범용 포인터인 void 포인터 선언하기 * 출처: 코딩도장 34.5 void 포인터 선언하기 void 포인터는 자료형이 정해지지 않은 포인터이다. 어떤 자료형으로 된 포인터든 모두 void 포인터에 저장할 수 있다. 반대로, void 포인터를 다양한 자료형으로 된 포인터에 저장할 수 있다. 이 때문에 void 포인터를 범용 포인터로 부른다. 직접 자료형을 변환할 필요 없이, 암시적으로 자료형이 변환된다. 단, void 포인터는 역참조(*)를 할 수 없다. (자료형이 정해지지 않았으므로 값을 가져오거나 저장할 크기도 정해지지 않았기 때문이다.) 또한 void 키워드로 변수를 선언하는 것도 컴파일 에러를 일으킨다. void 포인터는 함수에서 다양한 자료형을 받아들일 때, 함수의 반환 포인터를 다양한 자료형으로 된 포인터에 저장할 때, 자료형을 숨..
[C언어] 포인터 개념 (4): 다양한 자료형의 포인터 선언하기 * 출처: 코딩도장 34.4 다양한 자료형의 포인터 선언하기 다양한 자료형의 포인터를 선언해보자. C언어에서 사용할 수 있는 모든 자료형은 포인터로 만들 수 있다. 그런데 왜 포인터 자료형을 따로 만들지 않고 자료형 마다 포인터를 선언하게 하는 것일까? 포인터에 저장되는 메모리 주솟값은 모두 정수형으로 동일하다. 하지만 선언하는 자료형에 따라 메모리에 접근하는 방법이 다르다. 따라서, 다음과 같이 포인터를 역참조하면 선언한 자료형의 크기에 맞추어 값을 가져오거나 저장한다. 예를 들어, long long 포인터는 8바이트 크기만큼 값을 가져오거나 저장한다.

반응형