C언어
-
-
[ !!의 쓰임 ] What is "!!" in C?C언어 2021. 1. 19. 18:18
!과 !!의 의미 A = 사과는 영어로 Apple이다. B = 신형 맥북프로의 공홈 가격은 10만원이다. A -> TRUE -> 1 B -> FALSE -> 0 !A -> !(TRUE) -> FALSE -> 0 !B -> !(FALSE) -> TRUE -> 1 !!A -> !(!(TRUE)) -> !(FALSE) -> TRUE -> 1 !!B -> !(!(FALSE)) -> !(TRUE) -> FALSE -> 0 쉽게 생각하면 3이나 4.5 같은 것을 1로 쉽게 바꿀 수 있는 표현이다. 반환값이 char* 이거나 0, 1이 아닌 int를 반환하는 경우 유용할 거 같다. 아래는 양수 혹은 0, 음수를 반환하는 함수를 이용해서 1이상의 수를 반환하는 경우에 I++을 해주려는 경우이다. i += (has_ne..
-
[C언어] 포인터의 포인터, 그림으로 이해하기C언어 2020. 11. 13. 15:31
line이 가리키고 있는 위치를 main문이 아닌 다른 함수에서 조정하려면 call by refer()로 처리해야 하기 때문에 이중포인터가 필요하게 된다. 어떤 상자(변수)안에 있는 값을 수정하려면 그 주소값을 넘겨야 한다. 그리고 그 상자가 포인터일 경우, 넘기게 되는 값이 포인터의 주소값으로서, 포인터의 포인터가 되는 것이다. 아래 포스팅을 읽으면 더 잘 이해가 된다. 함수호출시의 이중포인터 사용하는 이유 written by chanywa, 2014-11-21 blog : http://chanywa.com e-mail : chany@chanywa.com "포인터도 머리 아픈데, 이중포인터는 또 뭐야... ㅠ.ㅠ" 이런 생각을 하는 분들께, 개념정리하는데 도움이 되지 않을까.. chanywa.com
-
size_t를 쓰는 이유C언어 2020. 10. 9. 16:05
https://madprog.tistory.com/entry/sizet-%EA%B5%AC%EC%A1%B0%EC%B2%B4%EC%99%80-%EC%82%AC%EC%9A%A9%EB%B2%95-%ED%8E%B8%EB%A6%AC%EC%84%B1 size_t 구조체와 사용법, 편리성. STL / C 제공 함수들을 사용하다보면 size_t 에서 int로 변환시 자료 소실에 관련된 warning이 많이 뜬다. 하지만 보통은 무시하고 쓰는게 일반적이다. 하지만 그게 과연 바른 것일까 라는 의문점이 �� madprog.tistory.com http://mwultong.blogspot.com/2007/06/c-sizet-unsigned-int.html C언어] size_t 형의 의미; unsigned int와 차이점, 차..
-
Linked list (링크드 리스트)C언어 2020. 6. 22. 19:35
구조체로 링크드 리스트를 만드는 것은 포인터만 제대로 이해하면 어렵지 않다. 대신 자주 실수하는 것이 생긴다. 내가 알면서도 항상 실수하는 것들을 올려본다. 1. typedef로 struct를 선언했더라도, struct내부에 포인터를 둘 경우 포인터는 별칭이 아니라 struct name * ptr; 처럼 이름을 써줘야한다. typedef struct _Name{ int a; int b; struct _Name * ptr; }Name; 2. Linking을 잊는 경우가 있다. file에서 불러와서 구조체 배열을 이어서 작성하게 되면 file의 마지막 요소의 next에 새로 추가할 노드(node)의 주소값을 넣어줘야한다. 생각보다 자주 까먹는다. 원인모를 segmentation fault 세그멘테이션 오류가..
-
Segmentation FaultC언어 2020. 6. 19. 15:35
세그멘테이션 실패 :허용되지 않은 방법으로 메모리 영역에 접근을 시도할 경우 발생 1. 읽기 전용 파일에 쓰기를 시도할 경우 2.운영체제 메모리 영역에 접근 시도한 경우 3.잘못된 메모리 영역접근( -1, NULL) 실제 예시를 보면 배열의 갯수가 -1개가 되는 경우 등 배열에서 문제가 생기는 경우가 자주 있다고 한다. 경험1. 파일 불러오기 오류 나 같은 경우 fopen을 사용하면서 if (fp == NULL) 를 검사하지 않아서 오류의 원인을 한 번에 못찾았다. 파일 포인터가 NULL인지 검사를 해보니, 왜인지 NULL이었다. 아무리 봐도 내 코드에는 오류가 없어서, 상대경로를 절대경로로 바꿔주고 읽어올 바이너리 파일을 미리 만들어 줬더니 실행이 됐다. rb를 쓰면 파일이 없을 경우 만들어주는 걸로 ..