-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
struct tagData{
int data1;
int data2;
};
void CallByValue(struct tagData _data);
void CallByReference(struct tagData* _pData);
void main()
{
struct tagData data={1,2};
CallByValue(data);
CallByReference(&data);
}
void CallByValue(struct tagData _data)
{
printf("data:%d,data:%d \n",_data.data1,_data.data2);
}
void CallByReference(struct tagData* _pData)
{
printf("data:%d,data:%d \n",_pData->data1,(*_pData).data2);
}
-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
struct simple{
int data1;
int data2;
};
void show (struct simple ts);
int main()
{
struct simple s1 ={1,2};
struct simple s2;
s2=s1;
show(s2);
return 0;
}
void show(struct simple ts)
{
printf("data:%d, data2:%d\n",ts.data1,ts.data2);
}
-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
struct simple{
int data1;
int data2;
};
void show (struct simple ts);
struct simple getdata(void);
int main()
{
struct simple s= getdata();
show(s);
return 0;
}
void show(struct simple ts)
{
printf("data:%d, data2:%d\n",ts.data1,ts.data2);
}
struct simple getdata(void)
{
struct simple temp;
scanf("%d %d", &temp.data1,&temp.data2);
return temp;
}
-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
struct point{
int x;
int y;
};
struct circle{
struct point p;
double radius;
};
int main()
{
struct circle c1 = {10,10,1.5};
struct circle c2 = {{30,30},2.4};
printf("circle1\n");
printf("x:%d,y:%d\n", c1.p.x,c1.p.y);
printf("radius:%f \n",c1.radius);
printf("circle2\n");
printf("x:%d,y:%d\n", c2.p.x,c2.p.y);
printf("radius:%f \n",c2.radius);
return 0;
}
-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
/* INT 사용하는 곳에 unsigned int 로 바꾸고 싶다면
이곳만 수정하면 됨 . 이식성 증가 */
typedef int INT;
typedef int *P_INT;
typedef unsigned int UINT; // 코드 길이를 줄이는 이점, 가독성 증가
typedef unsigned int *P_UINT;
typedef unsigned char UCHAR;
typedef unsigned char *P_UCHAR;
int main(void)
{
INT a =10;
P_INT pA=&a;
UINT b = 100;
P_UINT pB=&b;
UCHAR c='a';
P_UCHAR pC= &c;
printf("%d,%d,%c \n", *pA,*pB,*pC);
return 0;
}
-------------------------------------------------------------------------------------------------------------
// 사용하기 편한거
#include <stdio.h>
struct Data
{
int data1;
int data2;
};
typedef struct Data DATA;
int main(void)
{
DATA d= {1,2};
return 0;
}
#include <stdio.h>
typedef struct Data
{
int data1;
int data2;
}DATA;
int main(void)
{
DATA d= {1,2};
printf("%d %d ",d,d);
return 0;
}
-------------------------------------------------------------------------------------------------------------
// 오류나는 소스 코드 ㅋ
#include <stdio.h>
typedef struct Dog // 선언타입1
{
int data1;
int data2;
}Dog;
typedef struct //선언타입2
{
int data1;
int data2;
}Cat;
int main(void)
{
Dog d1;
struct Dog d2; // 이전형식 O
Cat c1; // <- 오류 부분
struct Cat c2; // 이전형식 X
return 0;
}
-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
union u_data{
int d1;
double d2;
char d3;
};
int main(vodi)
{
union u_data data;
data.d2=3.3;
printf("%d, %f, %c \n",data.d1, data.d2, data.d3);
data.d1=2;
printf("%d, %f, %c \n",data.d1, data.d2, data.d3);
data.d3='a';
printf("%d, %f, %c \n",data.d1, data.d2, data.d3);
return 0;
}
-------------------------------------------------------------------------------------------------------------
// 열거형 사용 예
#include <stdio.h>
enum color{red,green=100,blue};
int main()
{
enum color c1=red;
enum color c2=green;
enum color c3=blue;
printf("열거형 변수 출력 : %d, %d, %d \n",c1,c2,c3);
printf("상수 출력 : %d, %d, %d \n",red,green,blue);
return 0;
}
-------------------------------------------------------------------------------------------------------------
// 잘못됨 한번 찾아볼것.
#include <stdio.h>
int Write(int nNum,char* pFileName,char str[][100]);
void main()
{
char str[3][100];
int nNum = 0;
while (1){
printf("문자열 입력:");
scanf( "%s", str[nNum] );
nNum++;
if(nNum==3)break;
}
Write(nNum,"test.txt",str);
{
int i;
FILE *fp;
fp=fopen(pFileName,"w");
if(fp==NULL){
printf("파일 존재 하지 않습니다.\n");
}else{
fprintf(fp,"%d\n",nNum);
for(i=0;i<nNum;i++){
fprintf(fp,"%s\n",str[i]);
}
fclose(fp);
}
for(i=0;i<nNum;i++){
printf("%s\n",str[i]);
}
return 1;
}
}
-------------------------------------------------------------------------------------------------------------
//file read
#include <stdio.h>
int Read(char *PFileName, char str[][100]);
void main()
{
char str[3][100];
if(Read("Test.txt",str)==0)
{
printf("실패 \n");
}
}
int Read(char *pFileName, char str[][100])
{
int nNum,i;
FILE *fp;
fp=fopen(pFileName,"r");
if(fp==NULL){
printf("파일이 존재하지 안습니다.\n");
return 0;
}else {
fscanf(fp,"%d",&nNum);
for(i=0;i<nNum;i++){
fscanf(fp,"%s",str[i]);
}
fclose(fp);
}
for(i=0;i<nNum;i++){
printf("%s\n",str[i]);
}
return 1;
}
-------------------------------------------------------------------------------------------------------------
//메모리 동적 할당 > 프로그램실행후에도 메모리에 남아있어서 직접 지워주어야한다. 집에서 한번 다시 해볼것.
#include <stdio.h>
#include <stdlib.h> // malloc 과 free,exit를 사용하기 위함
#include <string.h> // memset 사용하기위함
int main(void)
{
int* a;
a = (int*)malloc(sizeof(int)); //메모리 할당
//malloc은 할당 후 쓰레기값이 있으므로 memset으로 초기화
memset(a,0,sizeof(int));
if(a==NULL){
puts("메모리 할당에 실패!"); //문자열 출력 전용 함수
// puts(1) 이나 puts('a')등은 안됨 오직 문자열만!
exit(1); // 실행중인 프로그램 종료 함수
}
*a=20;
printf("힙에 저장된 변수 a : %d \n",*a);
free(a); // 메모리 해제
return 0;
}
-------------------------------------------------------------------------------------------------------------
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int size, i;
int * arr;
printf("할당할 메모리 갯수 : ");
scanf("%d",&size);
//calloc은 malloc과 사용 형태가 다르고 할당과 동시에 0으로 초기화됨
//나머지는 malloc과 같으나 자동으로 초기화하기 때문에 비용 소모
arr=(int*)calloc(size,sizeof(int));
// arr=(int*)malloc(size*sizeof(int)); //malloc 사용 예
for(i=0;i<size;i++)
scanf("%d",& arr[i]);
for(i=0;i<size;i++)
printf("%d번째 요소 : %d \n",i,arr[i]);
free(arr);
}
-------------------------------------------------------------------------------------------------------------
//extern 사용 법
// main.c
#include <stdio.h>
extern int cal_num;
double add(double a, double b);
double minus(double a, double b);
double multiple(double a, double b);
double divide(double a, double b);
void main()
{
double a=10.2;
double b= 2.1;
printf("덧셈 : %f \n",add(a,b));
printf("뺄셈 : %f \n",minus(a,b));
printf("곱셈 : %f \n",multiple(a,b));
printf("나눗셈 : %f \n",divide(a,b));
printf("총 연산수 :%d \n", cal_num);
}
//test.c
#include <stdio.h>
int cal_num=0;
double add(double a, double b){
cal_num++;
return a+b;
}
double minus(double a, double b){
cal_num++;
return a-b;
}
double multiple(double a, double b){
cal_num++;
return a*b;
}
double divide(double a, double b){
cal_num++;
return a/b;
}
-------------------------------------------------------------------------------------------------------------
// 헤더 파일에 조건부 컴파일
#ifndef _TEST_H_
#define _TEST_H_
extern int cal_num;
double add(double a, double b);
double minus(double a, double b);
double multiple(double a, double b);
double divide(double a, double b);
#endif
-------------------------------------------------------------------------------------------------------------