본문 바로가기
728x90
반응형

Ghost의 Linux C Note(노트)22

Go to the Hell?~~~ 배열 포인터. 1. 이 번엔 어렵다는 배열과 포인터를 같이 써본 프로그램이다. 알다시피 배열도 주소이고 포인터도 주소이다. 그래서 이 프로그램에서 실험을 해보았다. int array[3][4] = {{15, 23, 45, 56}, {34, 52, 76, 23}, {43, 62, 91, 84}}; 2. int 형 array 라는 이름으로 배열을 선언한 동시에 초기화를 시켰다. 배열은 항상 시작할때 위의 그림처럼 초기화를 시켜야 한다. printf("%d ", array[i][j]); 3. printf 문에서 배열형식으로 array 구문을 넣었다. 그리고 보통 배열이 아닌 다차원 배열로 2차원 배열을 쓴 것이다. 1) array[2][3] = 30; 2) *(*(array+0)+3) = 23; 4. 위 구문.. 2012. 5. 29.
Ghost 배에서 열이~~? 배열.. 배열. 1. 배열은 성적표와 같이 한꺼번에 묶음이 필요할때 쓸수 있다. 예를 들면 이름으로 홍길동이나 아님 쪼질이 이렇게 많은 변수를 필요로 할때 배열 선언을 하게 되면 한번만 선언 하면 된다. int score[10]; 2. 정수형 배열이고 배열이름은 score 다. [10]이라고 된 부분은 메모리 크기를 할당 하는데 10 만큼 할당하겠다고 하는 것이다. float average; 3. 실수형 average 라는 변수를 선언 하였다. sum += score[i]; average = (float) sum /10; 4. 두번째 for 문에서 sum += score[i]l 라는 구문에서 배열이 쓰였다. 배열 선언을 했을때 10 만큼 만든 것은 10까지 출력을 할것이라고 미리 만들어 놓은 것이고 이 구문으로 .. 2012. 5. 23.
이상한 나라의 memmory?~~~ 메모리 영역 확인. 1. 위 소스는 메모리에 저장 될때 각 각 영역이 다르게 들어가는 것을 확인하기 위해 짠소스이다. *cp = 'b'; 2. 포인터형 cp 에 b를 문자를 넣는데 이 부분이 Linux와 visual studio의 컴파일에서 차이가 난다. 그 이유는 *cp가 메모리의 code 영역에 직접적으로 쓸려고 하기 때문에 안되는 것인데 원래 code영역은 읽기만 되는 영역이어서 쓰기가 안되는 것이 당연한 것이다. 그러나 visual studio에서는 쓰는게 가능 하다. 3. 위 그림에서 printf문이 2개가 출력 된것은 볼 수 있는데 그 다음 printf문이 안되는 것을 볼수 있다. *cp = 'b'; 이 구문 때문에 segementation fault 라는 오류가 뜨는데 쓸수 없는 메모리의 c.. 2012. 5. 21.
점점 멀어지나봐~~ ㅠㅠ 포인터의 이해를 위한... 1. 위 그림은 포인터를 이용하여 계속 값을 바꾸는 프로그램이다. char *p; 2. 포인터 p라는 변수를 선언하여 만든다. p = &ch; *p = 'B'; 3. ch 변수에 A 라는 값을 넣었다. 위 구문은 p라는 포인터 변수에 ch 라는 주소값을 넣고 *p는 p의 메모리 주소를 따라 들어 가면 거기에는 ch라는 메모리 주소 값이 있다. 그 주소에 B라는 문자를 넣으라는 뜻이므로 거기에 있던 A는 사라지고 B가 들어 가게 된다. printf("%c\n", ch); 4. printf 문으로 ch를 문자로 출력하라는 구문이다. 5. main 파일을 실행 시킨 화면이며 값이 다 다른 것을 볼수 있다. 소스에서 printf 문에는 분명 ch라는 변수를 출력 시키도록 했지만 값이 .. 2012. 5. 21.
728x90
반응형