목록c (50)
Nagie's DevStory
배열을 설명하다 갑자기 포인터 설명을 해서 조금 난감할 수도 있지만. 배열과 포인터는 상당히 밀접한 관계를 맺고 있다. 배열은 연속된 메모리공간을 가진다. 그렇다면 배열명이 가지는 의미가 무엇인지 생각해 봐야 한다. 배열명의 의미는 해당 배열의 첫 번째 원소의 메모리 주소를 의미한다. MyArr[5]의 배열이 있다고 가정한다면 MyArr은 &MyArr[0]과 같은 의미라는 것이다. int MyArr[3] = { 1,2,3 }; 그렇다면 위의 MyArr[0]의 값을 출력하려면 int MyArr[3] = { 1,2,3 }; printf_s("%d\n",MyArr[0]); 대신 int MyArr[3] = { 1,2,3 }; printf_s("%d\n",*MyArr); 도 사용가능하다는 의미다. 그리고 배열은 ..
포인터는 메모리 주소를 가리키는 일종의 변수이다. 일반 변수와 다른 점은 상수를 저장하는 것이 아닌 메모리의 주소를 저장한다는 게 주된 차이점이며 선언 시 아래의 코드처럼 *(아스테리스크)를 붙여주는 게 특징이다. int* Ptr; int *Ptr; 아스테리스크는 자료형 뒤나 변수명 앞에 붙어도 같은 의미이며 보통은 자료형 뒤에 붙여서 사용한다. 포인터 변수에 저장된 메모리 주소로 접근하려면 접근할 때도 아스테리스크를 붙여줘야 하며 이를 값을 참조한다고 한다. 기본적인 사용법은 아래와 같다. //포인터로 값을 참조 int a = 100; int* aPtr = &a; //변수 a의 주소를 추출해 aPtr포인터 변수에 주소를 대입 printf_s("%d \n",*aPtr); 포인터 변수를 통해 다른 변수에 ..
배열의 초기화 방법은 3가지가 있다. 첫째는 아래의 코드처럼 배열 선언과 동시에 초기화하는 방법이다. //배열 선언과 동시 초기화 int MyArr[3] = {1,2,3}; int MyArr[] = {1,2,3}; int MyArr[3] = {0,}; 배열 선언과 동시에 초기화하게 되면 배열의 인덱스를 따로 기재하지 않아도 중괄호 안에 입력한 요소의 개수만큼 컴파일러가 배열의 인덱스를 지정해 넣어준다. 또한 전부 같은 값으로 초기화 하고 싶다면 중괄호 안에 요소를 하나만 넣고 콤마를 찍어주면 된다. 둘째는 배열의 인덱스를 이용해 직접 값을 넣어주는 방법이 있다. //배열 인덱스 사용 int MyArr[3]; MyArr[0] = 1; MyArr[1] = 2; MyArr[2] = 3; 가장 직관적인 방법이긴..
배열은 데이터형과 변수명이 같은 변수의 집합을 말한다. //여러개의 변수 선언 int MyVariable1 = 0; int MyVariable2 = 0; int MyVariable3 = 0; int MyVariable4 = 0; int MyVariable5 = 0; //배열 선언 int MyArr[5] = {0,}; 위의 코드는 같은 데이터형을 가진 변수 5개를 배열로 선언한 예시이다. 같은 데이터형을 쓰는 변수가 여러 개가 필요하다면 첫 예시의 코드보단 두 번째 예시의 코드처럼 배열로 선언하는 게 효율이 좋다. 다만 같은 자료형의 변수를 여러 개 사용한다고 해서 무조건 배열로 선언하는 것은 좋은 생각이 아니며 필요에 따라 유연하게 사용하는 것이 올바르다. 배열의 인덱스 범위는 0에서부터 시작하며 최대 ..
srand(); 와 rand(); 는 C에서 난수 생성을 위해 사용된다. srand(); 는 난수의 시드를 초기화하고 rand(); 는 srand(); 에 의해 생성된 시드를 기반으로 난수를 생성한다. 사용 예시는 아래와 같다. #include #include int main() { // 현재 시간을 기반으로 시드(seed)를 설정 srand(time(NULL)); // rand를 사용해 난수 생성 int rNum = rand(); } 보편적으로 시간을 기준으로 시드를 생성하는데 이유는 그냥 사용하게 되면 똑같은 값만 계속 나오기 때문이다. 그리고 난수를 일정 범위 내의값으로 제한해 생성하고 싶다면 % 연산자를 사용해 적절한 범위로 만들 수 있다. 예를 들어 0 ~ 9 사이의 정수를 생성하고 싶다면 아래..