목록C (19)
노는게 제일 좋습니다.
0. 참고 자료http://soen.kr/ 1. 구조체 초기화구조체의 멤버들은 마치 배열을 초기화하듯 초기화할 수 있다. 별거없다.struct b { int apple; int banana; }; struct a { struct b bb; int tomato; }; struct a plug = { {1,2},3 }; printf("%d %d %d\n", plug.bb.apple, plug.bb.banana, plug.tomato); 2. 구조체의 대입구조체는 같은 모양이면 대입할 수 있다. 멤버들을 덮어씌우는 것이다. struct strt { int one; int two; }; struct strt a = { 1,2 }; struct strt b=a; printf("%d %d", b.one, b.two..
0. 참고 자료http://soen.kr/구조체 패딩 http://pangate.com/19 1. 구조체의 정의여러 변수들을 하나로 묶어둔 것. struct { char a[10]; int b; int c[5];} studioplug;위와 같이 a,b,c를 멤버로 가지는 studioplug라는 이름의 구조체를 정의할 수 있다.구조체 안에 들어있는 변수를 멤버라고 한다. 구조체도 멤버가 될 수 있다. (ㄷㄷ) studioplug.b=10;stucioplug.c[2]=100;멤버에 접근하고 싶으면 위와 같이 한다. 구조체 이름 뒤에 점(.)을 붙이고, 멤버를 적는다. 2. 구조체의 태그1번항목의 studioplug와 같은 구조체가 단 하나만 필요하다면, 이미 본 예제처럼 바로 정의를 해버려도 된다.하지만 동..
오늘은 글을 쓰면서 마크다운을 배워야겠다는 생각이 강렬히 들었다.그리고 주변 지인들에겐 옛날자료 보지말고 최신책 사서 보라고 말해줘야겠다모두 string.h 에 포함된 함수들. 0. 참고 자료 내용 전체 http://soen.kr/strcpy_s http://ehclub.co.kr/790strncpy_s http://ehclub.co.kr/792 1. 문자열 길이 조사- size_t strlen(const char *string);널문자는 길이에 포함되지 않음. 길이의 단위는 바이트.( 예 : printf("%s",strlen("studio플러그")); // studio는 6바이트, 플러그는 6바이트, 총 12바이트. 12출력. ) 2 문자열 복사- strcpy_s(char *dest, size_t le..
참고 자료 http://soen.kr/ 이번에도 이 내용들을 이해하는데 시간이 정말 오래걸렸다.개념 자체는 별 것 아닌데, 실제로 코드를 써보고 이건 왜 이런지를 고민하는 시간이 많았다. 1. 배열 포인터int intar[5][3]={{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}};int (*ar)[3];ar = intar;여기서 *ar++를 하면 {6,7,8,9,10}을 가리킨다. 만약 int(*ar)[3]에 int a[7]={1,2,3,4,5,6,7} 을 넣고싶다면, 이렇게 캐스팅할 수 있다.ar = (int(*)[3])a; 2. 배열 인수의 표현함수가 배열을 인수로 받을 때, *ar로 써도되고, ar[i]로 써도 된다.사실 배열을 인수로 전달할 수는 없다. 배열의 포인터..
참고자료 http://soen.kr/ 그 어느때보다 혼돈의 카오스가 가득한 공부였다...주변에 실력자들이 많아서 감사하게도 편하게 공부한다. 1. 부분배열(subArray)int a[2][5]; 라고 한다면 보통 다차원 배열이라고 부르지만 c에는 다차원배열이 존재하지 않고 오직 일차원배열만이 존재한다.즉, a[2][5]배열은 이차원배열이 아니며 a[0], a[1] 이라는 부분배열을 가진다. a[0]는 그저 a의 원소가 아니라, 하나의 완전한 배열인 것이다.a[0]이라는 배열은 a[0][0]~a[0][4]라는 원소를 가질 것이다. 2. 포인터 배열원소가 포인터형인 배열.예 : char *a[5]={"java","python","perl","ruby","cpp"};만약 위와같이 정의를 해두면, "java"가..
참고자료 http://soen.kr/ 1. 동적 할당, 할당 해제malloc과 calloc은 인수에 넣은 만큼의 공간을 할당하는 함수. free는 메모리를 풀어주는 함수. stdlib.h에 있다.void *malloc(size_t size );void *calloc( size_t num, size_t size );void free(void *memblock );예int *ar; ar = malloc(10 * sizeof(int)); printf("%p",ar); free(ar); printf("\n%p", ar); 2. 재할당 void *realloc( void *memblock, size_t size ); 첫 번째 인수로 할당된 메모리의 번지를 주고, 두 번째 인수로 재할당 크기를 준다.첫 번째 인수가..
참고 자료 http://soen.kr/ 1. void형 포인터대상체의 타입을 정하지 않은 포인터. 어떤 대상체든 가리킬 수 있다.하지만, 타입을 모르기 때문에 값을 읽을 수 없고, 증감 가감도 안된다. 2. void형 포인터의 대입void포인터에 다른 일반적인 포인터를 대입하는건 가능하다.하지만 반대는 안된다. void를 예쁘게 캐스팅한 다음 대입해야한다.-예 : pi=(int *)pv; 3. NULL포인터대게 포인터값 NULL은 0값을 가지도록 매크로 상수로 정의되어있다.포인터가 NULL값을 가지면 쓸모없는 것, 무효적인 것이 된다. 에러일 때 주로 NULL을 리턴해준다.그래서 if(pi==NULL) 과 같이 유효성을 검사한다.
참고 자료 http://soen.kr/ 1. *기호의 사용a=3*4; 에서의 *는 곱하기 기호이다.printf("%d",. *pi); 에서의 *는 포인터 연산자이다. 포인터 변수가 가리키는 주소에 기록된 데이터를 읽어온다.int *pi; 에서의 *는 포인터를 선언할 때 사용하는 punctuator이다. 2. 포인터의 타입포인터는 주소를 값으로 가지지만 int, char와 같은 타입을 요구한다. 그 이유는 다음과 같다.- 해당 주소로부터 시작하여 몇 비트나 읽을지, 어떤 방법으로 해석할지 알기 위해.- 다음 대상체(변수)로 이동할 때 얼마나 이동해야 할지 알기 위해 3. 포인터의 증감연산pi라는 포인터에 pi++ 와 같이 증감연산을 수행하면, 단순히 그 값을 1늘리지 않는다.현재 가리키는 대상체 뒤에 따라..