포인터 자료형의 크기

#include void main(void) { char* a; char b[10]; char* c[10]; char(*d)[10]; printf("%d\n", sizeof(a)); // 4 printf("%d\n", sizeof(*a)); // 1 printf("%d\n", sizeof(b)); // 10 printf("%d\n", sizeof(3[b])); // 1 printf("%d\n", sizeof(c)); // 40 printf("%d\n", sizeof(c[0])); // 4 printf("%d\n", sizeof(*c[1])); // 1 printf("%d\n", sizeof(d)); // 4 printf("%d\n", sizeof(d[0])); // 10 printf("%d\n", siz..

자식 쓰레드 생성하기.

#include #include #include #include int main() { pthread_t p_thread; pid_t pid; pid = fork(); if (pid == 0) { /* child process */ fork(); pthread_create(&p_thread, NULL, t_function, (void*)NULL); } fork(); printf("forked\n"); sleep(100); return 0; }

수업 정리

/*. 3인공지능 = 학습을 통해 특정 task의 성능을 개선시키는 프로그램 Storage의 분류 Primary/Secondary로 크게 구분된다. 주 기억장치 - DRAM NICard = I/O장치에 포함된다 랜카드 프로그램을 실행을 하면 Primary에 Load가 된다. bit = binary digit //////////////////////////////////////////////////////////////////////////////////////////////////// 트랜지스터의 구성 - 베이스 이미터 콜렉터 현대적인 의미에서 컴퓨터는 명령어들의 리스트에 따라 데이터를 처리하는 기계라 할 수 있다 ALU = Arithmetic Logic Unit CPU내부는 레지스터 메모리와 컨트롤유닛..

포인터 배열 공부하며 글로 정리한 것

1. 배열이 있다. 2. 포인터가 있다. 3. 포인터 배열이 있다. 포인터 배열에는 '주소'가 원소로 들어간다. 배열은 사실 3차원이든 2차원이든 C언어에서는 1차원 배열의 나열이다. 포인터의 배열(주소가 원소로 들어있는 것)은 이중 포인터처럼 사용 가능하다. 원소가 주소이기 때문이다. int arr[2][3] = { {1, 2, 3}, {4, 5, 6} }; int *parr[2]; parr[0] = arr[0]; parr[1] = arr[1]; *(*(parr + j) + i)) 를 파헤쳐본다. ( j와 i는 각 0~1, 0~2로 초기화) *(parr+j) 에서 parr에 +j를 더하는 '포인터 연산'을 해서 parr의 j번째 원소로 찾아간다.(인디렉션/간접 참조) *(parr+j) 의 연산이 끝난 ..

입력 버퍼 없애기! while(getchar()!='\n')

int c; scanf("%d",&c); while((c=getchar())!='\n') putchar(c); 이 느낌이다.. 뭔 느낌이냐면 scanf로 c를 받았을 때 엔터치면 \n도 같이 입력버퍼로 딸려가서 다음에 뭐 받을때 \n을 바로 인식해서 뭐 따로 입력도 못받고 넘어가니까 일단 while조건으로 c가 scanf로 받은 문자를 getchar()이 읽어서 고거를 다시 lvalue인 c에다가 저장을 하는데 !='\n' 즉 \n을 만나기 전까지!!! 저장을 한다 이거다. 그럼 c에는 scanf로 입력받은 값에서 \n이 빠진 값이 저장되고 그거를 putchar(c)로 출력해준다! 아 어렵네~ 근데 또 이해하니까 재밌고~

Argument 와 Parameter

Argument = Values Parameter = Variables

포인터를 사용하는 이유에 대해서

포인터는 네비게이션으로 비유를 들면 쉽겠다. 사실 함수 내에서는 포인터를 잘 사용하지 않는다. 그냥 그렇다. 비유로 들자면 만수르도 아니고 자기 집에서 네비를 왜 찍고 가겠는가?ㅋㅋ 함수에서 함수로의 값 전달이 필요할때 많이 쓴다고 한다. void Function(int *point) { printf("%d",*point); } int main() { aList = {"10","30","20"}; Function(aList); } 이런 식으로!!!! Function(int *point)에서 Function(int형 포인터에 aList라는 주소를 집어넣고- (배열은 이름 그 자체로 주소인거는 알지??..)-Function 함수의 프린트문을 실행하게 되면 aList의 배열이 출력되는 것을 알 수 있다. 이게..

포인터 지정방식 간접지정과 직접지정의 차이

우리가 흔히 사용하는 방식은 간접지정 방식이다. 간접지정 방식은 int A=300; int *pA=&A; *pA=600; 이런 식으로 작성한다. 직접지정 방식은 *pA=600; 대신에 *((int*)0x0014FF28)=600; 처럼 메모리 주소를 바로 좌변에 쓰고 지정하는 방식이다. int*으로 먼저 캐스팅한다. 여기서 (int *)A 는 임의의 메모리 주소인 0x0014FF28 을 의미한다고 생각하자. 그 후에 *를 더 붙여 주소의 값을 600으로 바꿔주는 작업을 했다.