#정리
** 포인터(*)는 고유메모리 주소를 가지는 변수로 4byte의 크기를 가지며, 자바의 new와 비슷하게 생각해볼 수 있다.
- 자바의 주소가 4byte를 가지게 된 이유 (자바도 객체로 던지면 안에 내용에 상관없이 4byte로 전송된다.)
# scanf - 입력 값 받기
//동적 메모리 할당 - #include <stdlib.h> // malloc, free 함수 사용
- (변수=malloc(sizeof(int)) ~ free(변수))형태로 사용 : int만큼 메모리 공간 생성
- char *변수 = malloc(sizeof(char)*10);//문자열 단위를 이용해서 10바이트까지 메모리 동적 할당
- char *변수 = malloc(sizeof(name4));//name4 변수가 가지는 크기 만큼 메모리 동적 할당
//문자열 입력 받기 - scan("%숫자s",&변수명); : 숫자만큼 메모리 공간 생성 - 입력 요청 메세지는 따로 작성해야함 - scanf("%10s",name1);//입력 값을 변수에 할당//숫자 입력 받기 - scan("%?",&변수명); - int변수 >> scanf("%d",&변수);//주소값이 있는 변수를 넣어줘야함. >> &를 붙이면 주소가 된다.
- long변수 >> scanf("%ld",&su2);
- float변수 >> scanf("%f",&floatsu3);//자리수(.2f) 지정 불가
- double변수 >> scanf("%lf",&doublesu4);//자리수(.2lf) 지정 불가
# atoi/atof - 타입변환
<헤드 선언 필요 - #include <stdlib.h> //standard library >
//atoi : char to int //a는 문자를 의미
- atoi(변수) 형태로 사용
//atof : char to float //a는 문자를 의미
- atof(변수) 형태로 사용
# variable - 변수
//전역(global)변수 : 함수 밖에 작성, 파일 내에서 함수에 상관없이 자유롭게 사용가능하다.
- int su = 100; //파일 내에서만 유효
- static int su2 = 44; //static 효과가 다른 파일에서도 유효(프로그램이 실행 중일 때)
//지역(local)변수 : 함수 안에 작성, 블록 내에서 정의된 내용은 반영되지 않는다.
- const int su3 = 88; //1회 초기화 이후 변경 불가 (읽기 전용)
- auto int su = 333;//auto - 로컬변수 지정, 블록 내에서 아무것도 안적으면 auto가 작성된 것과 같다.
//기타 변수
- register int total = 100;//register : 변수를 메모리가 아닌 CPU에 할당하여 성능 향상을 유도할 수 있다.
- volatile int total2 = 200;//volatile : 컴파일 최적화 과정을 제외하는 변수로 지정하여 성능향상을 유도할 수 있다.
* iot센싱 할 때, 오작동 방지에 활용 가능하다.
** 포인터(*)는 고유메모리 주소를 가지는 변수로 4byte의 크기를 가지며, 자바의 new와 비슷하게 생각해볼 수 있다.
- 자바의 주소가 4byte를 가지게 된 이유 (자바도 객체로 던지면 안에 내용에 상관없이 4byte로 전송된다.)
# scanf - 입력 값 받기
//동적 메모리 할당
- #include <stdlib.h> // malloc, free 함수 사용
- (변수=malloc(sizeof(int)) ~ free(변수))형태로 사용 : int만큼 메모리 공간 생성
- char *변수 = malloc(sizeof(char)*10);//문자열 단위를 이용해서 10바이트까지 메모리 동적 할당
- char *변수 = malloc(sizeof(name4));//name4 변수가 가지는 크기 만큼 메모리 동적 할당
//문자열 입력 받기 - scan("%숫자s",&변수명); : 숫자만큼 메모리 공간 생성
- 입력 요청 메세지는 따로 작성해야함
- scanf("%10s",name1);//입력 값을 변수에 할당
//숫자 입력 받기 - scan("%?",&변수명);
- int변수 >> scanf("%d",&변수);//주소값이 있는 변수를 넣어줘야함. >> &를 붙이면 주소가 된다.
- long변수 >> scanf("%ld",&su2);
- float변수 >> scanf("%f",&floatsu3);//자리수(.2f) 지정 불가
- double변수 >> scanf("%lf",&doublesu4);//자리수(.2lf) 지정 불가
--예문 코드 보기--
#include <stdio.h>
#include <stdlib.h> // malloc, free 함수 사용
int main(int argc, char **argv)
{
printf("scanf..\n");
//문자열 입력 받기
printf("Input your name[10byte]: ");//입력 요청 메세지는 미리 작성해야함
char name1[11];//최대 10바이트까지만 입력 가능
scanf("%10s",name1);//입력 값을 변수에 할당
printf("name1: %s\n",name1);//할당 값 출력
//메모리 동적 할당 (변수=malloc(sizeof(int)) ~ free(변수))
printf("Input your name[10byte]: ");
char *name2 = malloc(sizeof(10));//10바이트까지 메모리 동적 할당
scanf("%10s",name2);//입력 값을 변수에 할당
printf("name2: %s\n",name2);//할당 값 출력
free(name2);// 할당 해지 << 잊지 않게 주의
//숫자 입력 받기 - scan("%?",&변수명);
printf("Input intsu[0~100]: ");
int su;
scanf("%d",&su);//주소값이 있는 변수를 넣어줘야하므로 숫자를 바로 넣진 못한다. >> &를 붙이면 주소가 된다.
printf("intsu: %d\n",su);
printf("Input longsu2[0~100]: ");
long su2;
scanf("%ld",&su2);//주소값이 있는 변수 &su2 로 입력 필요
printf("longsu2: %ld\n",su2);
printf("Input floatsu3[0~100]: ");
float floatsu3;
scanf("%f",&floatsu3);//자리수(.2f) 지정 불가
printf("floatsu3: %.2f\n", floatsu3);
printf("Input doublesu4[0~100]: ");
double doublesu4;
scanf("%lf",&doublesu4);
printf("floatsu3: %.2lf\n", doublesu4);
return 0;
}
# atoi/atof - 타입변환
<헤드 선언 필요 - #include <stdlib.h> //standard library >
//atoi : char to int //a는 문자를 의미
- atoi(변수) 형태로 사용
//atof : char to float //a는 문자를 의미
- atof(변수) 형태로 사용
--예문 코드 보기--
#include <stdio.h>
#include <stdlib.h> //standard library : atoi 함수 사용
int main(int argc, char **argv)
{
printf("----char to int : atoi()----\n");//a는 문자를 의미
int num = 0;
char str[10] = "2022";
printf("%d, %s\n", num, str);
//str변수값을 int로 변환
num = atoi(str) + 10;
printf("%d, %s\n", num, str);
printf("---char to float : atof()-----\n");
printf("Input pi: ");
char pi[10];
scanf("%s",pi);
printf("su :%.2f\n",atof(pi)+33.333);
return 0;
}
# score mission : 3명의 성적을 처리할 수 있도록 작성.
//char grade = 'A'; //한글자 할 땐 배열 크기 지정 안해도 크게 상관없음.
--예문 코드 보기--
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char **argv)
{
printf("-------score mission------\n");
printf("Input your name: ");
char *name1 = malloc(sizeof(11));
scanf("%10s",name1);
printf("name1: %s\n", name1);
free(name1);
printf("Input your kor: ");
int kor = 0;
scanf("%d",&kor);
printf("kor: %d\n", kor);
printf("Input your eng: ");
int eng = 0;
scanf("%d",&eng);
printf("eng: %d\n", eng);
printf("Input your math: ");
int math = 0;
scanf("%d",&math);
printf("math: %d\n", math);
int total = kor+eng+math;
float avg = total/3;
//char grade[2] = "A";
char grade = 'A'; //한글자 할 땐 배열 크기 지정 안해도 크게 상관없음.
if (avg >= 90){
//strcpy(grade,"A");
grade='A';
}else if(avg >= 80){
//strcpy(grade,"B");
grade='B';
}else if(avg >= 70){
//strcpy(grade,"C");
grade='C';
}else if(avg >= 60){
//strcy(grade,"D");
grade='D';
}else {
//strcpy(grade,"F");
grade='F';
}
//printf("total: %d avg: %.2f grade: %s\n",total,avg,grade);
printf("total: %d avg: %.2f grade: %c\n",total,avg,grade);
return 0;
}
# variable - 변수
//전역(global)변수 : 함수 밖에 작성, 파일 내에서 함수에 상관없이 자유롭게 사용가능하다.
- int su = 100; //파일 내에서만 유효
- static int su2 = 44; //static 효과가 다른 파일에서도 유효(프로그램이 실행 중일 때)
//지역(local)변수 : 함수 안에 작성, 블록 내에서 정의된 내용은 반영되지 않는다.
- const int su3 = 88; //1회 초기화 이후 변경 불가 (읽기 전용)
- auto int su = 333; //auto - 로컬변수 지정, 블록 내에서 아무것도 안적으면 auto가 작성된 것과 같다.
//기타 변수
- register int total = 100; //register : 변수를 메모리가 아닌 CPU에 할당하여 성능 향상을 유도할 수 있다.
- volatile int total2 = 200;//volatile : 컴파일 최적화 과정을 제외하는 변수로 지정하여 성능향상을 유도할 수 있다.
* iot센싱 할 때, 오작동 방지에 활용 가능하다.
--예문 코드 보기--
#include <stdio.h>
//전역변수 : 소스코드 내에서 함수에 상관없이 자유롭게 사용가능
int su = 100; //파일 내에서만 유효
static int su2 = 44; //다른 곳에서도 유효(함수를 불러 왔을 때)
const int su3 = 88; //1회 초기화 이후 변경 불가 (읽기 전용)
int main(int argc, char **argv)
{
printf("variable...\n");
printf("su: %d\n",su);
su = 200; //값 변경
printf("su: %d\n",su);
printf("static su2: %d\n",su2);
//지역변수
static int num = 99;
printf("static num : %d\n",num);
if(1){ // "1"은 true를 의미한다.
//auto int su = 333; //auto - 로컬변수 지정
int su = 333; // 로컬 변수 정의 하지 않아도 동일 결과가 나옴
printf("if{}>>su: %d\n",su);
}
printf("su: %d\n",su);//블록 내에서 정의된 내용은 반영되지 않는다. >> su:200
//su3 = 88; //const int >> read-only error
printf("su3: %d\n",su3);
register int total = 100; //register : 변수를 메모리가 아닌 CPU에 할당하여 성능 향상유도.
printf("register total:%d\n",total);
volatile int total2 = 200;//volatile : memory speed up
printf("volatile total2: %d\n",total2);
return 0;
}