본문 바로가기

분류 전체보기182

[랭킹] 미국의 컴퓨터 과학과 순위 2020 2020년도 미국 컴퓨터과학과 대학교 랭킹 순위이다. 1위: MIT 2위: 스탠포드 대학교 3위: 케네기멜론 대학교 4위: UC 버클리 대학교 5위: 하버드 대학교 6위: 프린스턴 대학교 7위: UCLA 대학교 8위: 워싱턴 대학교 공동 10위: 콜롬비아 대학교 공동 10위: 코넬 대학교 공동 10위: 뉴욕 대학교(NYU) 케네기멜론 대학교가 전통적인 컴퓨터사이언스 명문대학인데, 순위가 최근 조금씩 밀리고 있는 것 같다. 전통적으로 공대가 강한 MIT의 경우 컴퓨터사이언스도 최고이며, 최근 1위를 도맡아 하고 있다. 스탠포드 대학교와 UC의 버클리의 경우에는 구글, 애플과 같은 미국의 IT 기업 본사가 위치한 캘리포니아 실리콘벨리와 가까운 곳에 위치해 있어서 컴퓨터사이언스 분야의 탑 클래스 학교로 통한다.. 2020. 8. 16.
[C언어] * 연산자와 [ ] 연산자 : 포인터를 대상으로 사용할 수 있는 연산자 앞에서 말한 바와 같이 포인터 변수와 함께 배열명이 포인터로 사용된다. 단 그 둘의 차이점은 변수로 사용되느냐 상수로 사용되느냐였다. 보통 요소의 순서를 나타낼 때 사용하는 [ ]연산자, 포인터를 선언하거나 어떤 메모리에 접근할 때 사용하는 * 연산자로 익숙하지만, 우리가 알고 있는 포인터 외에 배열에서 배열의 이름으로 쓰이고 있는 배열명도 동일하게 포인터(어느 메모리를 가리킨다)로서 기능을 하기 때문에, 포인터나 배열명이나 둘 다 포인터를 피연산자로 하는 * 연산자와 [ ] 연산자를 사용할 수 있다. 다시 정리를 하자면, 포인터는 가리키고 있는 대상의 주소값을 가지고 있지만, 그 뿐 아니라 대상에 대한 (메모리에 접근하는 방식을 결정할) 자료형에 대한 정보까지 같이 가지고 있어야 포인터라고 할 수 있다. 2020. 8. 14.
[C 언어] 배열에 관해서: 배열명 =포인터 앞서 배열의 배열명이 상수 포인터라고 했다. 다시 반복하자면, 배열명은 그 배열의 첫번째 요소를 가리키고 있다.(주소값을 가짐) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include int main(void) { int arr[3] = {0, 1, 2}; printf("배열의 이름: %p \n", arr); printf("첫 번째 요소의 주소: %p \n", &arr[0]); printf("두 번째 요소의 주소: %p \n", &arr[1]); printf("세 번째 요소의 주소: %p \n", &arr[2]); return 0; } Colored by Color Scripter cs 를 실행시켜 얻은 실행결과는 다음과 같다. 실행결과에서 확인하게 되는 점. 1. 배.. 2020. 8. 10.
[C언어]포인터 VS 배열에 대하여: 변수 VS 상수 포인터와 포인터가 가리키는 변수를 선언해보자. int * ptr; int var; ptr = &var; 이렇게 프로그램을 실행시키면 포인터는 var를 가리키고 있게 된다. ptr ㅡ> var 배열을 선언해보자. int arr[10]; 이렇게 하면 이 배열의 이름인 arr는 10개의 요소로 구성된 배열의 첫번째 값(0번째 요소)의 주소값을 의미한다. 이는 arr이라는 배열의 이름이 arr 배열의 첫번째 값을 가리키고 있다. 따라서, arr이라는 배열명도 일종의 포인터이다. arr ㅡ> arr[0] 위의 ptr은 변수이기 때문에, ptr = &num와 같이 가리키는 값을 변수 var에서 변수 num으로 바꿀 수 있다. 그러나, arr은 오로지 배열의 처음인 요소만 가리킬 수 있다. 위의 ptr과 같이 arr.. 2020. 8. 10.
[C언어] 포인터 사용시 주의해야할 점: 포인터 변수의 초기화 1 2 3 4 5 6 7 8 9 10 11 12 #include int main(void) { int * ptr; // ptr의 값이 초기화되지 않음 * ptr = 123 // ptr이 가리키고 있는 곳에 123을 저장하려 함 . . . } Colored by Color Scripter cs !! 포인터 ptr의 값을 따로 초기화하지 않으면, 주소값이 저장되는 ptr에 쓰레기 값으로 초기화된다. 따라서 알 수 없는 곳에 123이라는 값이 저장될텐데, 그 알 수 없는 곳이 컴퓨터 메모리 상 중요한 부분일 수도 있으므로 이러한 소스코드는 매우 위험하다. 1 2 3 4 5 6 7 8 9 10 11 12 #include int main(void) { int * ptr = 200; // ptr의 값이 200으로 .. 2020. 8. 10.
[C언어] 포인터가 가리키는 메모리를 참조하는 * 연산자 예제 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #include int main(void) { int num1 = 100, num2 = 100; // 변수 num1과 num2를 선언하고 각각 100으로 초기화 int * ptr; // 포인터 변수 ptr을 선언 ptr = &num1; // 포인터 ptr이 num1을 가리키게 함 (*ptr) += 20; // num1 += 20 과 동일 ptr = &num2; // 포인터 ptr이 num2를 가리키게 함 (*ptr) -= 20; // num2 -= 20과 동일 return 0; } Colored by Color Scripter cs 이 소스코드에서 num1은 100에서 20이 증가된 120으로 다시 저장되고, num2는.. 2020. 8. 10.
[C언어] & 연산자 (Ampersand, 앰퍼샌드) 1) & 연산자가 1개이면 비트 연산자 AND를 나타낸다. 비트 연산자는 정수형 자료에서만 사용이 가능하다. 이때, & 연산자는 0과 1의 2진수로 되어 있는 비트 단위의 연산을 수행하는데, 대응되는 두 bit가 모두 1일 때만 결과가 1이다. 예를 들어, x: 1 0 0 1 0 1 0 1 y: 0 1 0 0 1 1 1 1 로 저장되어 있다고 하자. 그러면, x & y는 (x와 y를 &연산 하면) 0 0 0 0 0 1 0 1 이 된다. 2) & 연산자가 2개이면 논리연산자 AND를 나타낸다. &&는 논리곱(AND)이라고 하며, 양쪽 모두 참일 때만 참이다. 예를 들어, a: 참 b: 거짓 c: 참 이라고 하자. 그러면, a && b는 거짓이 되고, a && c는 참이 된다. C등 여러 프로그래밍 언어에서.. 2020. 8. 9.
[C언어] 포인터 변수에 있어 자료형의 의미 2 1 2 3 4 5 6 7 8 9 10 11 12 #include int main() { double num2 = 3.14; int * ptr2 = &num2; *ptr2 = 10; } cs 여기에서 변수 num2가 더블형인데, num2를 가리키는 포인터 변수 자료형을 int라고 설정해놓으면, 포인터는 자기가 가리키는 변수가 원래 더블형이라 8바이트 임에도, 정수형으로 인식하여 4바이트로 num2 변수에 데이터 값 10을 메모리에 다시 저장하게 된다. 그러면 8바이트 짜리로 메모리에 저장되어 있던 값에 정수형 4바이트 짜리로 저장하게 되니(4바이트 짜리로 알고 메모리에 접근하게 되니) 앞의 4바이트는 10이라는 정수값이 채워지고, 기존의 8바이트 짜리 메모리의 뒤 4바이트는 3.14의 흔적이 남아있게 된다.. 2020. 8. 9.
[C언어] 포인터 변수에 있어 자료형의 의미 1 포인터 변수를 선언할 때 사용되는 * 연산자 그와 더불어 그 앞에 일반 변수와 같이 자료형을 표현하는데, 이 자료형은 포인터 변수에 관한 내용이 아니라, 포인터가 가리키는 변수의 값의 자료형에 관한 것이다. int * ptr 이라고 할 때, 포인터 변수 ptr 앞에 붙는 자료형 int는 ptr이 가리키는 변수(엄밀히 말하면, 그 변수의 메모리에 저장된 값)의 자료형을 나타낸다. int ptr = &num에서 처럼, 그냥 일반 변수 ptr에 변수 num의 주소값을 저장할 수는 있지만, 이럴 경우, 일반 변수 ptr은 변수 num의 주소값 외에는 num이라는 변수(메모리)에 저장된 값에 대한 정보는 알 수가 없다. 여기서 자료형 int는 오롯이 ptr이라는 변수가 정수형이라는 정보일 뿐이다. 그래서, 1 2.. 2020. 8. 9.