U E D R , A S I H C RSS

CNight2011/고한종


Round 0


많이 모일거라 예상했는데 6피에서 내려온 그 인원 그대로라 당황 ㅋㅋ
권순의 형 만나서 반가웠어욬ㅋㅋ
모이자마자 각자 할일. 나는 과제+ 동적할당 연구하고 태진이는 뭐했더라, 순의형이랑 종하형은 스타함 ㅋㅋㅋ
순의형 발림 ㅋㅋㅋ

  • 악ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ - 권순의


Round 1


지원이 누나 오셨다.
누님께 배열과 포인터의 기본, 주소에 의한 .. 뭐라고해야하나 암튼. 근본적으로 배열은 포인터와 동일. 이런것을 배웠다.
그리고 malloc 쓰는법을 들었음.
런타임에러나서 물어본것이였는데 오류 원인은 설명을 듣고나서 이해했음.
해결은 어쩌다보니 되었음ㅋ

Round 1.5


진경이 등장
진경x 경진 대회 기출문제 풀어줌.
우왕.
malloc 물어봤더니 쭉쭉 나옴.
역시 진경이임

Round 2


링크드 리스트 배웠음
이게 11학년도 수능 언어영역에 출제되었다니
난 기억에 없는데
하지만 난 맞았겠지 언어에서 비문학은 하나도 안 틀렸었으니!
순의형이 소개하고, 종하형이 개념설명 하고, 지원이누나가 쓰는 법을 가르쳐 주셨음.
종하형이 더블 링크드 리스트도 하자고 했는데 시간관계상 하지말자고 하여 기각.
sorting이랑 스택큐? 인가 한다고 했었는데 이것도 결국 안함 ㅋ

Round 3


홍혜 먹음
다음엔 볶음짬뽕시켜봐야지,.
군대얘기나옴. 으아아아
진경이 안대끼고 자는척하면서 웃기는건 다 듣고 웃고있었음ㅋ
다들 치우기싫어서 다 먹고서 한참동안 시간끈건 공공연한 진실.

Round 4


Round 3안갔다고 태진이가 그런다.
몰라 이거 구분은 종하형이 말한 그 라운드가 아니라 그냥 내가 생각하는 라운드임ㅇㄹㅇㄹㅇㄹ

잠을 쫓자고 시작한 카트가 해뜨고 해산할때까지 이어짐 -_-
막판 역전이 빈번했고 막자도 흥하고 그런 시간이였음.
난 카트가 없어서 한참이나 ㅜㅠ.

배열


Round 0,1


배열이 근본적으로 포인터란 것은 이미 알고 있었으나 실제 컴파일러에서 이런식으로 표현 된다는 것을 배웠다.

ex)

int arr5;
라고 한다면

printf("%d",arr);

-> arr의 주소가 나온다.
-> 포인터 연산자를 동원해서 표현하자면 &arr0이 된다.

arri = *&(arr0+sizeof(int)*i);
arrij *&(arr00 sizeof(int)*i*j+sizeof(int)*i); -> 맞겠지여...?

실제 메모리상에서는 2차원이든 3차원이든 메모리상에서는 그냥 선형으로 저장된다.
사실 이것도 새싹교실때 이미 배웠던 내용. 원희형.. 보고싶어요.


포인터

Round 0,1


datatype* : 포인터 자료형 선언법 -> 이게 독자적인 자료형이라고 봐도 무관.
*val_name : 해당 포인터변수가 가르키는 변수의 값을 참조
&val : &연산자 우측의 주소값을 불러온다.(이건 val자리에 들어가는 변수가 포인터 자료형이 아니여도 됨)

포인터 변수에 주소값이 저장된다고 생각하는것보다. 그 주소에 해당하는 변수를 가르킨다고 생각하는게 옳다.

다중 포인터도 배웠다.

구조체

Round 1


  1. 선언법
    1)
    typedef struct name{
    data...
    data...
    ...
    }nickname;
    사용할땐 nickname만 써주면 된다.

    2)
    struct name{
    date...
    ...
    };
    사용할때마다 struct name 라고 해야한다.

    3)
    typedef struct{
    data...
    ...
    }nickname;
    닉네임만 선언하는 방법. 비표준이란다.

  2. 개념
    의미가 통하는(?) 유용한 (?) 데이터들을 그룹화 한다고 생각하면 된다.
    일단 해두면 sort할때 매우 편하다 한가지만 sort해두면 나머지도 따라오니까!

링크드 리스트

일단 뭘하는 것 인진 제대로 알았다.
사용법은 생각이 나질 않는다.. 사실 이때 졸려서 한귀로 듣고 거의 흘림..

C언어에 ->이런 연산자가 있다는건 알아냄.. 뭔가 상당히 직관적임.

링크드 리스트가뭐냐!

한 '노드'에 의미가 있는 값과 다음 노드의 주소를 가르키는 포인터를 담는다.
다음노드는 그 다음노드를 가르킨다.
이게 계속 반복된다.
보통 끝은 Null을 가르키는 포인터가온다. 하지만 맨처음 노드를 가르켜 순환형 리스트가 될 수 도 있다.
쌍방형성도 존재한다.

메모리상에 나란히 선언되어 주소값 간격이 일정한 배열과는 달리
링크드 리스트는 규칙석이 존재하지 않기 때문에 값을찾는데는 시간이 많이 걸리는 단점이있다만.
목록의 중간에 삽입,삭제가 그냥 배열에 비해 매우 편리하므로 자주 사용된다.

즉, 프로그래머는 힘들고 사용자는 편하다는얘기...
하...

동적 할당


<stdlib.h> 을 선언한다.

그 뒤 malloc을 쓴다.
ex)
float* dia =(float*)malloc(sizeof(float)*10);

10은 배열로 치면 dia 10을한 셈이 된다.
이대로 라면 변수가 10개짜리인 배열을 heap 선언한것과 같다.
dia 10이랑 다른점은.. dia 10은 stack에 할당된다는것이 다른점이다.

본래 의도대로라면 배열이 '터지는'때를 캐치해서 realloc으로 배열의 갯수를 늘려주려고 했으나
C언어에서 int a 2={1,2} 선언후 printf("%d",a2); 같은 경우도 허용하므로 언제 터지는지 알 수가 없었다..
그냥 10개 지정해주었으니 내가 알아서 10개째일때 realloc을 써줘야 했다.
암튼 그래서 횟수를 측정할 int i;를 만들고
if(i%10==0)realloc(dia,sizeof(float)*10*k++);이라고 했다.
당연히 k도 선언된 변수.
그랬더니 잘돌아간다. 기분 좋다!

  • 진경이가 말하길 이건 사람입장에선 쓰기 참 편하지만 비효율적이라고한다.
    많은 경우에 매모리를 복사해야하니까.
    그러니까 애초에 heap에 엄청큰 공간을 할당하고, 버퍼를 통해 값을 임시저장한뒤, 다차면 큰공간으로 옮기고 입력이 끝나면 realloc을 통해 큰공간을 알맞게 줄여주는 그런것이 더 좋다고 하는데 난 잘모르겠닼
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:22:41
Processing time 0.0561 sec