<strlen()함수>

strlen()함수는 문자열의 길이를 알려주는 함수이다.

이 함수를 사용하기 위해서는 헤더 파일 string.h파일을 인클루드 해야한다.

 

<실습>

 


 

-결과-

LIST

'Programming > C' 카테고리의 다른 글

C언어 - strcmp()함수, strncmp()함수  (0) 2016.06.14
C언어 - strcpy()함수, strncpy()함수  (0) 2016.06.13
C언어 - gets(), puts()함수  (0) 2016.06.11
C언어 - 공용체  (0) 2016.06.10
C언어 - 구조체와 함수  (0) 2016.06.09

<gets()함수와 puts()함수>

gets()함수는 문자열 입력 함수이고, puts()함수는 문자열 출력 함수이다.

정의되어 있는 헤더파일은 stdio.h이다.

gets()함수는 함수의 인자로 전달받은 메모리 주소에 문자열을 입력한다. 쉽게 말해, 비어있는 메모리 공간을 받으면 그 공간의 주소에 사용자가 입력한 문자열을 넣는것이다.

puts()함수는 함수의 인자로 전달받은 메모리 주소를 참조하여 종료 문자(\0)를 만날때까지 문자열을 출력한다.

 

<실습 - 1>

 


 

-결과-

 

가만보면, printf() - scanf()puts() - gets()함수들이 비슷하다.

하지만 명백한 차이점이 있다.

 

<실습 - 2>

 

 

-결과-

 

scanf같은 경우 입력 받을 때 공백문자를 만나면 종료문자로 인식해 버린다. 그렇기 때문에 Hi밖에 입력이 안된 것이다.



LIST

'Programming > C' 카테고리의 다른 글

C언어 - strcpy()함수, strncpy()함수  (0) 2016.06.13
C언어 - strlen()함수  (0) 2016.06.12
C언어 - 공용체  (0) 2016.06.10
C언어 - 구조체와 함수  (0) 2016.06.09
C언어 - 자기참조 구조체, 외부참조 구조체  (0) 2016.06.08

<공용체>

공용체는 구조체의 개념에서 모두 같지만 딱 하나... 메모리를 공유한다는 점과 차이점이 있다.

공용체도 변수들을 묶어 하나의 구조체 처럼 사용한다. 하지만 이 공용체는 변수의 메모리 공간을 공유한다.

 

예를 들면

struct abc

{

   char a;

   int b;

   double c;

};

 

union abc

{

   char a;

   int b;

   double c;

};

이렇게 있다고 가정하자. 각각의 의미를 그림으로 표현해보면...

 


 

공용체와 구조체는 접근방법과 문법도 거의 동일하다.


<실습>


-결과-

 

위에 공용체와 구조체의 문법을 보면 거의 동일한 것을 알 수 있다.

sizeof를 이용해서 union abstruct xy를 찍어냈다. 결과는 각각 4 8이다.

이렇듯이 메모리 공간을 공유하는 것을 알 수 있다.

그렇다면 union에 있는 멤버 변수 b20으로 바꾼다면? 당연히 a도 바뀔것이다.

LIST

'Programming > C' 카테고리의 다른 글

C언어 - strlen()함수  (0) 2016.06.12
C언어 - gets(), puts()함수  (0) 2016.06.11
C언어 - 구조체와 함수  (0) 2016.06.09
C언어 - 자기참조 구조체, 외부참조 구조체  (0) 2016.06.08
C언어 - 구조체와 포인터  (0) 2016.06.07

구조체와 함수는 함수의 인자를 주고 받을때 자료형이 구조체인 것을 말한다

간단하다. 함수의 기본 개념와 내용만 알고있다면...?

자 함수에서도 그랬듯이 구조체도 똑같다.

1. 구조체를 함수의 인자로 전달

2. 구조체를 함수의 반환형으로 전달 (여긴 값주소 총 2개의 종류로 나뉜다)

 

먼저, 구조체를 함수의 인자로 전달하는 경우에 대해서 알아보자.

<실습>

 

-결과-

 

 

앞에서는 구조체를 전달했다면 이번에는 구조체형으로 반환해보자.


1. 구조체 값의 반환


 

-결과-


 

 

2. 구조체 주소의 반환

 


-결과-

LIST

'Programming > C' 카테고리의 다른 글

C언어 - gets(), puts()함수  (0) 2016.06.11
C언어 - 공용체  (0) 2016.06.10
C언어 - 자기참조 구조체, 외부참조 구조체  (0) 2016.06.08
C언어 - 구조체와 포인터  (0) 2016.06.07
C언어 - 구조체와 배열  (0) 2016.06.06

<자기참조 구조체>

말 그대로 해석을 하면 자기 자신을 참조하는 구조체이다

간단히 예를 들면

struct abc

{

   int num;

   int age;

   struct abc* p;

};

이런식으로 abc라는 구조체 안에서 다시 자기자신(abc)의 구조체를 참조하는 것이다.

struct abc* p는 자기 참조 구조체라고해서 주소를 저장할 수 있는 포인터 변수이다.

어떤 주소? 자료형이 struct abc인 구조체 변수이다.

 

<실습>

 


 

구조체 struct abc의 멤버변수로 자기자신을 자료형으로 같은 포인터 변수를 선언하였다.

이 의미는 자기 자신을 통해서 같은 자료형(struct abc)을 갖는 구조체 변수에게 접근할 수 있다는 것이다.

위의 코드를 보면 구조체 abc의 구조체 변수는 현재 3개 선언되어있다. A, B, C

세개의 구조체 변수를 통해 원래는 자신의 구조체 변수를 통해서 접근을 시도해야 하는데 마지막 줄에 구조체 변수 C의 멤버 변수에 접근할 때는 정작 자기 자신을 활용되지 않고 구조체 변수 B를 통해서 접근하였다.

그림을 그려보면 다음과 같다.

 

 

-결과-

 

<외부참조 구조체>

외부참조 구조체는 말 그대로 자신의 구조체에서 다른 구조체 변수의 주소를 저장할 수 있는 포인터 변수를 선언해 자기자신을 통해 다른 구조체로 접근할 수 있는 구조체를 의미한다.

 

<실습>

 

-결과-

LIST

'Programming > C' 카테고리의 다른 글

C언어 - 공용체  (0) 2016.06.10
C언어 - 구조체와 함수  (0) 2016.06.09
C언어 - 구조체와 포인터  (0) 2016.06.07
C언어 - 구조체와 배열  (0) 2016.06.06
C언어 - 구조체의 재정의 Typedef  (0) 2016.05.28

<구조체와 포인터>

이것도 제목이 구조체와 포인터이지만... 구조체의 개념과 포인터의 개념을 응용한것이다.

 

두 가지로 분류할 수 있는데, 배열과 똑같이 분류된다.

1. 구조체 멤버 변수로 포인터 사용

2. 구조체 변수로 포인터 사용

 

1. 구조체 멤버 변수로 포인터 사용

<실습>

 

-결과-

 

 

2. 구조체 변수로 포인터 사용

구조체 변수로 포인터를 사용할 때는 접근 연산자가 있다.

<실습>

 

-결과-

 

여기서 확실히 알 수 있는 것은 p==&stu이다.

(*p).no을 보면 (*&stu).no이렇게 표현할 수 있다. *&는 상쇄되므로 stu.no가 되는것이다.

, (*p).no == (*&stu).no == stu.no이다.

연산자 '->'가 하나 더 생기는데 이것을 해석해보자.

(*p).no == p->no이다. 공식처럼 외우도록 하자.

LIST

'Programming > C' 카테고리의 다른 글

C언어 - 구조체와 함수  (0) 2016.06.09
C언어 - 자기참조 구조체, 외부참조 구조체  (0) 2016.06.08
C언어 - 구조체와 배열  (0) 2016.06.06
C언어 - 구조체의 재정의 Typedef  (0) 2016.05.28
C언어 - 중첩 구조체  (0) 2016.05.27

<구조체와 배열>

구조체와 배열은 단순히 구조체와 배열의 개념을 합쳐서 응용한 것이다.

, 구조체 멤버변수에 배열을 사용해서 코딩하고, 구조체 변수로 배열을 사용해서 코딩하는 것이다.


<실습>

이 두가지를 모두 한번에 볼 수 있는 실습을 해보자.

 

-결과-

 

구조체 멤버 변수로 배열을 사용할 때 주의사항

구조체 멤버 변수로 배열을 사용후 main함수 내에서 배열값을 초기화 해줄때 주의사항이있다.

실습을 통해 어떤 오류가 있고 해결 방법을 알아보자.


<실습>


 

왜 오류가 날까?

코드를 자세히 보면 stu.nostu.name은 무엇인가? 저 두개는 배열의 이름이다. 배열의 이름은 무엇인가? 시작주소이다. 시작주소에 값을 넣는게 말이 되나...? 그래서 오류가난다.

아마, printf("%x", stu.no);를 하면 주소값이 나올것이다.

 

그렇다면 어떻게 해결을 해야할까?

string.h 헤더파일에 정의해놓은 함수중에 strcpy를 이용하면 된다. 이 부분은 뒤에 함수 파트에서 자세히 다루겠고, 답만 적어놓고 가겠다.

strcpy(stu.no, "1");

strcpy(stu.name, "kim);


LIST

'Programming > C' 카테고리의 다른 글

C언어 - 자기참조 구조체, 외부참조 구조체  (0) 2016.06.08
C언어 - 구조체와 포인터  (0) 2016.06.07
C언어 - 구조체의 재정의 Typedef  (0) 2016.05.28
C언어 - 중첩 구조체  (0) 2016.05.27
C언어 - 구조체(struct)  (0) 2016.05.26

변수를 typedef을 사용해서 재정의를 할 수 있다.

구조체는 재정의가 가능할까? 가능하다. 뭐로?  typedef으로!

typedef int mytype;

typedef : 자료형 재정의 키워드

int : 기존 자료형

mytype : 새 이름

 

실습으로 바로 들어가보자.

 

<실습>


 

-결과-

LIST

'Programming > C' 카테고리의 다른 글

C언어 - 구조체와 포인터  (0) 2016.06.07
C언어 - 구조체와 배열  (0) 2016.06.06
C언어 - 중첩 구조체  (0) 2016.05.27
C언어 - 구조체(struct)  (0) 2016.05.26
C언어 - void형 포인터  (0) 2016.05.25

<중첩 구조체란?>


구조체 내에 구조체가 있는 구조체를 의미한다.

예를 들면 이해가 쉬울것이다.

 



<실습>



위 코딩을 보면 score라는 구조체 안에 kor, math, eng, result의 구조체 멤버 변수들이 선언되어 있다.

그리고 student라는 구조체 안에 출석번호인 noscore의 구조체 변수인 s가 멤버 변수로 선언되어 있다. 이렇게 구조체 안에 또 구조체가 있는 것을 중첩 구조체라고 한다.

접근할 때는 "."연산자를 두번 사용해서 건너 건너간다는 의미로 접근할 수 있다.

 


-결과-

 

 


<중첩 구조체의 초기화>

 

-결과-



LIST

'Programming > C' 카테고리의 다른 글

C언어 - 구조체와 배열  (0) 2016.06.06
C언어 - 구조체의 재정의 Typedef  (0) 2016.05.28
C언어 - 구조체(struct)  (0) 2016.05.26
C언어 - void형 포인터  (0) 2016.05.25
C언어 - main()함수에 인자가 있을 때  (0) 2016.05.24

<구조체란?>

하나 이상의 변수를 묶어 그룹화하는 사용자 정의 자료형이다. 그룹화 할 때 같은 자료형을 가진 변수들을 묶어 그룹화할 수 있고, 서로 다른 자료형을 가진 변수들을 묶어 그룹화 할 수 있다.

 



<구조체의 구조>

struct point

{

   int x;   // 구조체 멤버 변수

   int y;

}

구조체 키워드 struct를 사용해서 구조체의 이름은 point로 하였다.

 



<구조체 변수 선언>

구조체 변수 선언은 두 가지 방법이 있다.

1. 구조체 정의와 구조체 변수 선언을 동시에 하는 방법

struct point

{

   int x;

   int y;

} p1, p2, p3;   // 구조체 변수

 

2. 구조체 정의와 구조체 변수 선언을 따로 선언하는 방법

struct point

{

   int x;

   int y;

};

 

int main()

{

   struct point p1, p2, p3;   // 구조체 변수

   return 0;

}

 



<구조체 멤버 변수 접근>

구조체 변수로 멤버 변수에 접근하는 법은 구조체 변수를 사용하면 된다.

이때 접근 연산자는 "."이다.

struct point

{

   int a;

   double b;

};

 

int main()

{

   struct point p1;

   scanf("%d %lf", &p1.a, %p1.b);

   printf("%d \n", p1.a);

   printf("%d \n", p1.b);

   return 0;

}

이때 구조체 변수 p1으로 구조체 멤버 변수 ab에 각각 접근하고 있다.

 


<구조체 변수의 초기화>

struct p

{

   int x;

   int y;

}

int main()

{

   struct p p1={10,20};   // p1이라는 구조체 변수안에 할당된 x, y 구조체 멤버 변수에 10, 20을 저장한다.

}

주의사항

struct point p1;

p1={10,20};   // 이렇게 구조체 변수를 초기화 할때 구조체 변수 선언과 초기화를 따로하면 에러난다.

      

struct point p1;

p1.x=10;   // 구조체 멤버 변수로 직접 접근해야지 에러가 안난다.

p1.y=20;

 

 

<구조체 변수의 복사>

struct point

{

   int x;

   int y;

};

struct point p1={10,20};

struct point p2={0,0};

p2=p1;   // 구조체 변수의 복사

printf(%d %d \n", p2.x, p2.y);   // 10, 20출력

 

구조체 변수끼리 연산을 가능할까?

p1+p2   // 불가능 하다. 구조체 변수는 대입 연산만 가능함!



LIST

'Programming > C' 카테고리의 다른 글

C언어 - 구조체의 재정의 Typedef  (0) 2016.05.28
C언어 - 중첩 구조체  (0) 2016.05.27
C언어 - void형 포인터  (0) 2016.05.25
C언어 - main()함수에 인자가 있을 때  (0) 2016.05.24
C언어 - 주소를 반환하는 함수  (0) 2016.05.23

+ Recent posts