3월 30일 문자열/구조체
2010. 3. 30. 17:41ㆍ2010년/3월
-문자열-
main 함수의 인수
int main(int icnt,char *cmd[])
우리가 아는 main.c를 실행할경우 main함수는 cl컴파일러가 해주는것이 아니라 윈도우가 실행 시켜준다. 그래서 main(void)함수도 형식이지만 icnt는 인수의 갯수 그리고 cmd[]는 각각 주소를 저장한다. 명령프롬프트에서 실행을 시킬경우
main.exe 123 345 678 를 하게 되면 인수의 갯수가. main,123,345,678로 총 갯수가 4개 가 된다. 그럼 이 인수는 어디에 저장될까~? 그것은 바로 char *cmd[]가 가르키는 주소값에 저장되어있다.
-구조체-
구조체는 우리가 사용하는 여러가지 자료형을 하나로 묶을수있다. 즉 배열에서는 int형은 int까리지만 구조체에서는 우리가 아는 모든 자료형을 하나로 묶어서 사용할수있다.
#include<stdio.h>
#pragma pack(1) // 1바이트 최적화
typedef unsigned int uint32;
struct test
{
int inum;
char a;
char g;
short b;
int icnt;
char z;
};
int main()
{
uint32 a=100;
struct test b;
struct test c;
b.inum = 1000;
b.icnt = 2304;
c.inum = 2000;
c.icnt =1238;
printf("b.inum의 값은 = %d\n",sizeof(b));
printf("c.inum의 값은 =%d\n",c.inum);
return 0;
}
원형은 struct에서 test는 태그라고 부르고 구조체 템플릿의 이름이다~!
여기서 구조체는 최적화라고 말할수 있다. 일단 기본적으로 4바이트식 방을 만들어준다. 그래서 int inum으로 정의하고 char a라고 하면 총 5바이트지만 8바이트의 저장공간이 할당된다 하지만 다시 char g를 할경우 8바이트안에 다들어가게 된다 그리고 short b를 하면 8바이트이다 하지만 char g와 short b의 자리를 바꾸게 되면 12바이트가 할당된다 그이유는 최적화로 4바이트씩끊어서 저장하지만 그안에서는 2 바이트씩 저장한다고 보면된다. 총 4바이트 저장공간에 1바이트 char를 넣고 2바이튼 short를 넣게 되면 2~3 바이트사이에 걸치기때문에 2번째는 빈공간을 주고 3~4에 short이 저장된다.
typedef문 예약어 typedef은 새로운 자료형을 정의하는데 사용된다. 긴 이름의 자료형을 짧게 정의하는 데 사용된다.
typedef unsigned char BYTE;
BYTE cnum; 은 즉 unsigned char cnum; 과 같다. 그래서 typedef을 통해서 간단하게 사용할수 있다
그리고 typedef문과 struct와 함께 사용하는경우
#include<stdio.h>
#include<math.h>
typedef struct
{
int x;
int y;
}POINTER;
int main()
{
POINTER p1={0,0};
POINTER p2={1,1};
double distance;
double px;
double py;
px=p2.x-p1.x;
py=p2.y-p1.y;
distance=sqrt(px*px+py*py);
printf("distance : %6.3f\n",distance);
return 0;
}
구조체 struct지만 이제POINTER로 바로바로 쉽게 사용할수 있다.
구조체는 struct test ti 으로 하지만 POINTER ti으로 쉽게 할 수 있다.
'2010년 > 3월' 카테고리의 다른 글
3월31일 연결리스트, 전역변수 (0) | 2010.03.31 |
---|---|
3월 29일 배열 (0) | 2010.03.29 |
3월26일 (수학함수 포인터) (0) | 2010.03.26 |
3월25일 함수와 스택구조 (0) | 2010.03.25 |
3월 24일 함수와redirection (0) | 2010.03.24 |