우주먼지
Published 2022. 8. 4. 10:11
C 개념 메모 Languages/C

1. 순서도와 c언어의 기본

시작  타원
준비  육각
입력  우 직각
처리  정
출력  좌 물결
끝     타원

주요 순서도 기호 

마름모 판단
우직각  입출력
->    흐름선
유심모양  카드파일   종이카드의입출력
동그라미 연결자   다른곳으로의연결
가로 1/3   서브루틴호출   부(sub)프로그램처리
세로 1/2     루프 명령반복



표준입출력과 함수들이 들어있는 파일 : stdio.h (헤더파일이라고도 부름)
ex )  #include <stdio.h>  헤더파일을 포함하겠다는 선언

main()   <- 메인함수
{           <- 시작
int i,j,k;  <-  정수형으로 변수선언
scanf  = 키보드로부터 입력을 받으라는뜻의 명령어
("%d %d", &i, &j);                  %서식문자   d =10진수정수    i,j=변수
&= 변수 앞쪽에 붙이는것 (엔퍼센트)
k = i + j;
printf("%d|n", k);             printf =출력 %d=정수  |n= 한줄출력후 다음줄로 줄바꿈하라는 제어문자 
("%d|n",k);   요약 = k에들어있는 숫자를 10진정수(%d)로 출력하고나서 줄바꿈(|n) 하라는뜻
; (세미콜론)  <- 코딩부분에만 줄끝날떄마다 붙이기 




2. c언어의 변수 (정수형,실수형,문자형,포인터형 등)
변수작성규칙
- 영문자,숫자,_ 를 사용하며 글자수제한X
- 중간에 공백포함X
- 대.소문자구문
- 첫자는 영문자나 _로 시작해야함
- 예약서 사용X
- 변수선언 시에도 문장끝에 반드시 ; 를 붙여야함

1변수에는 1개의 값만 가짐   A=10  or  A=10+5    기존 10은 사라지고 15가 들어감

[예시1] 
main()
{
  A=3;
  A=5+3;  위에3사라지고 5+3=8 이들어감
  A=A+5;    5+3  +5
}
의 결과값은  13       or A=A+1  1씩 값을 누적시키라는 공식

[예시2] 변수작성규칙중 틀린이유 확인
main() /*2020.2.10 by Kang*/            /*   */ = 주석문
{
  int abc+1;        <- 맞는것
  int 1abc;         <-  틀림 변수며이 숫자로 시작하면안됨
  int for;            <- for(반복하는예약어) 라서 안됨
  char kang        <- ; 이빠짐




3. C/C++의 데이터 타입크기 및 기억범위   (1byte=8bit  =2의8승 =256가지) , (부호없는=양수 부호있는=음,양수)

종류 데이터타입 크기 기억범위
문자 char 1byte -128~127
부호없는문자형 unsigned char 1byte 0~255
정수 short 2byte -32768 ~ 32767
int 4byte -2147483648~2147438647
long 4byte -2147483648~2147438647
long long 8byte -9223372036854775808 ~ 9223372036854775807
부호없는정수형 unsigned short 2byte 0 ~ 65535
unsigned int 4byte 0 ~ 4294967285
unsigned long  4byte 0 ~ 4294967295
실수(소수) float 4byte
double 8byte
long double 8byte




4.  scanf (printf도사용가능)함수  = C언어의 표준입력함수,기보드로입력받아 변수에 저장하는함수 
- 특징
- 입력받을 데이터의 자료형,자릿수 등을 지정할수있음
- 한번에 여러개의 데이터를 입력받을수있음
- 서식문자열과 변수의자료형을 일치해야함
  ex) scanf("%d %f", &i, &j);  -> '%d'와 i , %f"와 j는 자료형이 일치해야함
- 사용법 scanf (서식문자열,변수의주소)
예) scanf("%3d",&a);

%= 서식문자임을 지정
3 = 입력자릿수를 3자리로지정
d = 10진수로입력
&a= 입력받은 데이터를 변수a의주소에 저장
f = 실수



서식문자열   (부호없는 = 양수)
%d = 정수형10진수
%u = 부호없는 정수형10진수    
%e = 지수형실수  (ex = 3.555500e+004    = 3.555500 x 10의4승)
%o = 정수형8진수
%x = 정수형 16진수
%c=문자 입출력
%s= 문자열 입출력
%f= 소수점을 포함하는 실수

%ld = long형 10진수
%lo = long형 8진수
%lx= long형16진수
%p = 주소를 16진수로



5. 산술연산자 ( 우선순위는 증감연산자가 제일높고  일반연산자는 후순위)

* = 곱하기
/ = 나누기
% = 나머지  7%4 = 3    (나누기가 아니라 나머지를 구하는기호)
++ = 증가연산자          (전치 = 먼저 변수의값을 증감시킨후 변수에 연산적용) ex= ++a  , --a
-- = 감소연산자          (후치 = 먼저 변수의값을 연산시킨후 변수에 값을증감) ex= a++ , a--

산술연산식

3 - 7 % 8 + 5  =  3-(7%8 =7)+5  = 1
-4 * 3 % -5 / 2 =  (-12%-5  = 2) /2 = 1

정수형 변수 a=2 b=3 c=4 d=5 의 산술연삭식 풀이
 
a= ++a + ++a;   =  4+4 =8   
b= ++b - --c;   = 4-3 =1
c= ++b / b++;   = 4/4=1         (후치연산 b++ 를 안하는이유는 결과가 저장되는곳이 변수 c이고 후치연산결과는 b)
d= 10 % c++;    = 10%4=2
a= ++c + c++ + ++c + c++; = 6+6+6+6=24





6. 예약어 : 정해진기능을수행하도록 용도가정해져있는 단어로, 변수이름이나 다른목적으로 사용X
C언어 예약어
제어문 : 제어문
자료형 : 데이터타입
기억클래스 : 기억범위의 유형

제   반복  : do,for,while
어   선택  : case,default,else,if,switch
문   분기  : break,continue,goto,return

자  char,double,enum,float,int
료  long,short,signed,struck
형  typedef,union,unsigned,void

기억클래스 : auto,extern,register,static
기타 : const,sizeof,volatile


7. C언어의 자료형(Data Type) 예제  (* 문자열 char 방식은 맨끝에 NULL문자포함하여 +1 갯수지정해야함)

main()
{
char aa='A';                     <- char(문자형) aa변수에 A를 삽입,A는 아스키코드로변환 즉, aa=65 / 문자형은 아스키코드변환
char ab[6] = "KOREA";      <- 변수는기본적 기억장소 1개인데 [6] 으로 기억장소 갯수 지정가능 6개면 0~5   기억장소갯수+1(NULL문자) = 입력할문자수
short int si =32768;            <- si변수에 짧은(short) 정수형숫자(int) 삽입  short=2byte=16bit=2의16승=65536=-32768~32767 인데 32768이니까 오버플로우,이줄 에러
int in = 32768;                   <- in변수에 정수형(int) 삽입 4byte=32bit=40억개 = 에러없음
float fl =24.56f;                  <- fl변수에 단정도실수(float) 24.56f      = 단정도에는 변수값 끝에 f 삽입
double dfl = 24.5678;         <- dfl변수에 배정도실수(double) 24.5678   = 실수에서는 f가없는 배정도가 default값으로 지정됨
}


8. scanf 함수 예제

다음 C프로그램은 무슨작업을 수행하는지 확인  [ 변수,배열선언 = float,char,int  입력 = scanf ]        NULL문자 = |0 (역슬래시 0)

#include <stdio.h>             <- stdio.h 라는 헤더파일(표준입출력함수 들어있음) 을 c언어에 포함(include) 시키겠다는 선언
main()
{
int i,j; 정수형으로 i,j
float aa; 실수 aa
char cc,dd[10]; 문자열이 cc ,dd (기억장소10개[0~9],NULL값포함) 로 들어감
scanf("%c|n", &cc); cc라는 변수에 (&cc)  문자(%c) 입력 후 줄바꿈(|n)
scanf("%d %o", &i, &j); i변수는 10진정수, j는 8진정수로 입력
scanf("%f", &aa); aa변수에 실수(%f)로 입력
scanf("%s", dd); 배열이름에는 &를 붙이지않고 그냥 dd 라고씀 %s = 문자열로입력
}





9. 기타 표준 입출력 함수


입 getchar() = 키보드로 한 문자를 입력받아 변수에 저장하는 함수
력 gets() = 키보드로 문자열을 입력받아 변수에 저장하는 함수로,[Enter]를 누르기전까지를 하나의 문자열로 인식-저장 

출 putchar = 인수로 주어진 한 문자를 화면에 출력하는 함수
력 puts = 인수로 주어진 문자열을 화면에 출력한 후 커서를 자동으로 다음 줄 앞으로 이동하는 함수


1. a= getchar() ; GIL BUT putchar(a); G
2. putchar('G); G     <- 1글자 자체를 묶을땐 ' ' 로 묶어줌
3. putchar('G'+1); 71+1=72=H   (아스키코드)
4. gets(b); GIL BUT puts(b); GIL BUT
5. puts("GIL BUT"); GILBUT   " "는 문자열 입력시 사용





10. printf 함수 : 표준 출력 함수 
사용법 : printf(서식문자열,변수)     <- scanf는 변수명앞에 &(주소연산자)가 필수인데 printf는 쓰지않음

printf 제어문 : 서식문자열과 변수 사이에 씀
|n (new line) : 커서를 다음줄 앞으로
|b (backspace :  커서를 왼쪽으로 한칸
|t (tab) : 커버를 일정 간격 띄움
|r (carriage return) : 커서를 현재 줄의 처음으로
|0 (null) : NULL
|' (single quote) : 작은따옴표 출력
|" (double quote) : 큰따옴표 출력 
|a (alert) : 스피커로 벨소리를 출력
|| (backslash) : 역슬래시출력
|f (form feed) : 한페이지 넘김

ex)
printf("%-8.2f", 200.2);
- : 왼쪽부터출력
8 : 출력자릿수지정
2 : 소수점 이하를 2자리로지정
f : 실수로 출력
결론 : 200.2 를  왼쪽부터 8자리, 소수점이하를 2자리로 실수로 출력 = 200.20






11. printf 함수예제

#include <stdio.h>
main()
{
int i=250;
fload a = 125.23f
float b = 314.1592e+5;     <- 정규화과정을 거쳐서 3.1415929e+07 로 변환 (실수형지수)
char c='A';                 <- A의 아스키코드 65가 들어감
char dd[] = "Korea";     <- 배열의 갯수는 초기값을 바로 넣을때는 갯수를 안적어도 됨 []
1. printf("10진수i = %d|t8진수i = %o|n", i, i);
2. printf("a = %8.2f, b = %e|n", a, b);
3. printf("c값은 문자로%c이고 아스키코드로 %d이다.|n", c, c);
4. printf("% = 10s, %10s|n|r", dd, dd);

1. i 변수의 값을 2번출력, 1번째 서식문자는 %d(정수형) 2번쨰 서식문자는 %o(8진수)
 - 1번째 변수 = "10진수i =" + %d + |t (기본4칸tab) + "8진수i = " + %o(8진수) + |n (줄바꿈)
 - 출력값 : 10진수i = 250    8진수i = 372    <- 여기서 |n 까지 적용되면 커버가 밑줄로감


2.  %8.2f = 8자리수+소수점둘째자리 f(소수)로 오른쪽기준출력 / %e (자리수 미지정시 소수점6자리까지출력)
 - 출력값 : a = 125.23 , b = 3.141592e+07

3. 출력값 : c값은 문자로 A이고 아스키코드로 65이다

4. 1번변수 : %-10s =왼쪽으로10자리       2번변수 : %10s|n|r = 오른쪽으로 10자리
 - 출력값 Korea_____, _____Korea



12. 관계연산자
순서도 
= : 같다   c언어 : == : 같다
<> 또는 =/ : 같지않다     c언어 : != : 같지않다
> : 크다
>= : 크거나 같다
<= : 작거나 같다



13. 비트연산자 : 모든수를 2진수로 변환


연산자 의미 비고
& and 모든 비트가 1일때만 1 AND는 * 연산
^ xor 모든비트가 같으면0, 하나라도 다르면1
| or 모든 비트 중 한 비트라도 1이면 1 OR은 + 연산
~ not 각 비트의 부정, 0이면 1 1이면 0     
<< 왼쪽 비트를 왼쪽으로 이동
>> 오른쪽 비트를 오른쪽으로 이동

AND = &
OR = |
XOR = ^

비트연산식   (a=5 b,7 로 가정) 5= 101 7= 111

1. a & b = 101 = 5
2. a | b = 111 = 7
3. a ^ b = 010 = 2
4. ~ b = 001 = 1000 = -8          <- 2의보수로 구하기
5. a >> 1 = 10 = 2                   <- 오른쪽으로 땡기면 왼쪽끝애 패딩비트생김 (양수일땐 무조건0 음수일떈 오른쪽>>일때만1)
6. B << 3 = 111000 = 56


>> 공식 : a >> 1 =  a/2해서 나머지값 버리고 남은값이 값
<< 공식 : a << 3 = a*2 = 7x2x2x2 = 56




14. 논리연산자 : 두개의 논리값을 연산하여 참또는 거짓을 결과로 얻는 연산자. 관계연산자와 마찬가지고 거짓0 참1

연산자 의미 비고
! not 부정
&& and 모두 참이면 참
|| or 하나라도 참이면 참


a=2 b=3 c=0 d=1 e=1

연산자 우선순위 : 증감 -> 산술(*/%+-) -> 시프트 -> 관계(<<=>=>) -> 관계(==!=) -> 비트(&->%->|) -> 논리 (&&->||)
-> 조건 -> 대입 -> 순서

논리게이트연산식 ( !(not게이트)가 나올시 부울대수 2의보수로 변환계산)

1. a > 3 && b > 2 = false = 0
2. a > 3 || b > 2 = ture = 1
3. !c = 0의 부정은 true =1
4. a == 2 && b ! = 3 = false = 0
5. a & b && c = false = 0
6. ++d && --e : false = 0




15. 대입연산자 : 산술,관ㄱ몌,비트,논리 연산자에 모두 적용가능, 오른쪽부터 계산

연산자 의미 비고
+= a+=1 a=a+1  a랑 1과 먼저 더하고 더한결과를 a에 삽입
-= a-=1 a=a=1
*= a*=1 a=a*1
/= a/=1 a=a/1
%= a%=1 a=a%1
<<= a<<=1 a=a<<1
>>= a>>=1 a=a>>1


대입연산식 (a=2 b=3 c=4 d=5)
1. d >>= 1;  = 2
2. c += 10 + ++a; =  17
3. d * = 10 = b++; = 35




16. 조건연산자 : 조건에따라 서로 다른 수식을 수행함 ( ? 앞은 조건 : 양쪽은 수식 )
형식  조건 ? 수식1 : 수식2;          '조건'의 수식이 참이면 '수식1'을, 거짓이면 '수식2'를 실행함





17. 기타연산자

sizeof : 자료형(int,char,float 등)의 크기를 표시함
, : 한줄에 2개 이상의 수식을 작성하거나 변수를 정의할때 , 왼쪽에서 오른쪽 순으로 수행(순서연산자라고 부르기도함)
자료형 : 자료형을 다른 자료형으로 변환할때 사용,cast연산자 라고부름
ex ) (int)1.3 + (int)1.4;





18. 연산자 우선순위

대분류 중분류 연산자 결합규칙 우선순위 

단항연산자 단항연산자 !(논리not),~(비트not),++,--  <- (오른쪽부터계산)

산술연산자 * / % ->
시프트 연산자 <<  >>
이항연산자 관계연산자  < <= >= >  ==  !=
비트연산자 & -> ^ ->  | (우선순위 왼쪽순)
논리연산자 &&   || (우선순위 왼쪽순)

삼항연산자 조건연산자 ?   : ->
대입연산자 대입연산자 = += -= *= /= %= <<= >>= 등 <- (오른쪽부터계산)
순서연산자 순서연산자 , ->



문제
float a=123456789.0e-5f;          -5 = 오르쪽으로 5칸 옮겨놓은것  (오른쪽 음 왼쪽 양)
prnitf("소수점a=%6.1f 지수형a=%e|n", a, a);
결과값 : 소수점: 1234.6 <- 6은  1234.5 에서 뒤에6이 반올림된것
             지수형: 1.234568e+03  <- 1.234567(8) <- 8이 반올림된것 




19. 제어문 : 프로그램은 무조건 위에서 아래로 실행되는데, 조건을 지정해서 진행순서 변경가능

[ if ] : 조건에따라 실행할 문장 두개중하나선택 , 실행할 문장이 2문장 이상이면 { } 로 묶어줌
- 형식 
if(조건)
  실행할문장1;
Else
  실행할문장2;

[ 다중if] : 선택해야할 문장이 여러개일때 다중 if
- 형식
if(조건1)
  실행할문장1;
else if(조건2)
  실행할문장2;
else if(조건3)
  실행할문장3;



[ switch ] : 조건에따라 분기할 곳이 여러곳인경우 간단하게 처리할수있음
case문의 레이블에는 1개의 상수만 지정가능, int,char,enum형의 상수만 가능
case문의 레이블에는 변수지정 불가
-break 문은 생략 가능하지만 break문이 생략되면 수식과 레이블이 일치할때 실행할 문장부터
 break문 or switch문 이 종료될떄까지 모든 문장 실행
- 형식  :  수식에서 계산한 결과가 레이블1과 같으면 레이블1출력
switch(수식)
{
case 레이블1:
실행할문장1;
break;
case 레이블2:
실행할문장2;
break;
.
.
.
default:
실행할문장3;
}
main{}
{
 int jum = 85;
 switch (jum / 10)
 {
  case 10:
  case 9:
     printf("학점은 A입니다.|n");
     break;
  case 8:
     printf("학점은 B입니다.|n")
  break;
  default:
  printf("학점은 F입니다.|n")
   break;
}
}



[ 반복문 ] : 보통 변수의값을 일정하게 증기시키면서 정해진수가 될떄까지 명령이나 명령그룹을 반복수행
for,while,do~while

for문 : 초기,최종,증가값을 지정하는 수식을이용해 정해진횟수를 반복하는 제어문.
          반복은 초기값을 정한다음 증가값 만큼 증가시키면서 최종값이 될때까지 반복수행
         ★★ for문의 초기값은 for문이 처음 수행될때 1번만 실행 
- 형식
for(식1; 식2; 식3)
실행할 문장;

해설
식1 : 초기값을 지정할 수식입력
식2 : 최종값을 지정할 수식입력
식3 : 증가값으로 사용할 수식 입력
실행할문장 : 식2가 참일 동안 실행할 문장을 입력. 문장이 두문장 이상일경우 {}를 입력
ex) 식1(초기값)=1 식2(최종값)=10 식3(증가값)=1
(초기값)1 을 1(증가값)씩 증가시켜서 (최종값)10 이 되게 프로그래밍

반복문 : i 

main()
{
int i, hap=0;
for(i=1; <=10; ++i)
{
  hap+=i;
}
printf("%d, %d|n", i, hap);
}
결과값 : 11 , 55           ★  (초기값 i=1는 1번만 사용하고(증가값은 초기1번만안씀) 반복구간에서 증가값-> 최종값만 반복)





while문 : 조건이 참인동안 정해진 문장을 반복수행하다가 조건이 거짓이면 반복문을 벗어남

- 형식
while(조건)
실행할문장;

해설
조건 : 참이나 거짓을 결과로 갖는 수식을 '조건'에 입력함. 참(1)을 직접 입력할수도 있음
실행할문장 : 조건이 참일 동안 실행할 문장을 입력. 문장이 두문장 이상일경우 {}를 입력

[조건이 참일경우에만 반복실행하고 거짓이 나오는순간 프로그램종료]
main()
{
int i=0, hap=0;
while (i<10)
{
   i++;
   hap +=i;
}
printf("%d, %d|n", i, hap);
}

결과값 : 10,55






do~while문 : while과 같지만, 다른점은 무조건 한번 실행한다음 당므조건을 판단하여 탈출여부 결정

- 형식
do
   실행할문장;
while(조건);

해설
do : do~while문의 시작부분에 그대로입력
실행할문장 : 조건이 참인동안 실행,두 문장 이상일경우 {}를 입력
while(조건) : 예약어,do~while문의 끝부분에입력
(조건) : 참이나 거짓을 결과로 갖는 수식을 '조건'에 입력, 조건이 반복문 끝에있기때문에 무조건한번 실행후 다음조건판단


main{}
{
int i=0, hap=0;
do
{
  i++;
  hap +=i;
} while(i<10);
printf("%d, %d|n", i, hap);
}

결과값 : 10,55



break,continue : switch문이나 반복문의 실행제어를 위해 사용
break : switch문이나 반복문 안에서 break가 나오면 블록을 벗어남
continue : 반복문에서만 사용, continue이후의 문장을 실행하지않고 제어를 반복문의 처음으로 옮김

예제) 1~10까지의 합을 더하되 5의 배수는 배제하는 프로그램을 작성하시오

main()
{
int i=0, hap=0;
while (1)
{
   i++;
   if (i>10)
      break;                        <- 위의 if(i>10) 을 만족하는순간 반복문을 빠져나와서 printf 출력문으로 이동
   if (i%5==0)                     <-  i % 5 == 0   ( i % 5 를했을때 결과가 0 인것만 배제 {5의배수} )
      continue;                    <- 5의 배수가 걸렸을때 continue를 만나 반복문의 처음으로 되돌아감 5가 아니면 밑에 hap+=i;로 이동하면서 다시 반복문의 처음으로
   hap+=i;
}
printf("%d, %d|n", i, hap);
}


0 0
1 1
2 3
3 6
4 10

6 16
7 23
8 31
9 40
10 
11
결과값 : 11,40


문제 1

다음 c언어의[코드]와 [출력]을 보고 괄호 1,2에 들어갈 적합한 코드를 쓰시오
<출력>
  1  <- %3d로 인해 총 2칸띄어쓰기 + 1 해서 총3자리 %3d 출력
  1  2
  1  2  3
  1  2  3  4
  1  2  3  4  5
  1  2  3  4  5  6
  1  2  3  4  5  6  7

int main(void) {
   int i, j, n;
   n= ( );
   for (i=1; i<=( ); i++) {
      for(j=1; j<=i; h++)
         printf("%3d", j);    <- %3d 전체자리 3자리를 확보하고나서 오른쪽부터 숫자를  채우고 2칸띄워서(%3d) 출력
      printf("\n");
   }
}


결과값: 1 = 7   2 = n





문제 2

main()
{
int jum = 95;
char lev;
switch (jum/30)
{
case 3:
   lev = 'A';
   break;
case 2:
   lev = 'B';
   break;
case 1:
   lev = 'C';
   break;
default:
   lev = 'D';
   break;
}
printf("%c등급\n", lev);             <- %c = 문자그대로 출력
}

결과값 : A등급



문제 3

main()
{
int i=10, hap=0;
while (i>1)         <- i 가 1보다 작아질때까지 반복(while)
{
i--;
if (i % 3==1)        <-  이 조건이 참이 되야만 밑에 hap+=1 이 실행됨, 거짓일경우 다시 while문 반복 
hap +=1;
}
printf("%d\n", hap);
}

결과값 : 12






포인터 : 변수의 (시작)주소 , c언어에서는 주소를 제어할수있는 기능제공 ★ 주소할당할때 byte단위로 할당 4byte면 100~103 ★
c언어에서 변수의 주소를 저장할때 사용하는 변수를 [포인터변수] 라고함

포인터 변수를 선언할때는 자료의 형을 먼저 쓰고 변수명 앞에 간접연산자 * 붙임
ex) int *a;  int b=10       b[10]  시작주소 100

포인터변수에 주소저장위해 변주의주소 알아낼때는 변수앞에 번지연산자 & 붙음
ex) a= &b;     <- b의 주소를알아내기위해 &를붙여서 b의 시작주소 100이 a로 들어감

실행문에서 포인트변수에 * 를붙이면 해당 포인터변수가 가리키는곳의 값을 말함
ex) c= *a;  <- c에 저장된 주소(a)가 가리키는곳에 저장된 값을 말함

포인터변수는 필요에 의해 동적으로 할당되는 메모리영역인 힙 영역에 접근하는 동적 변수임

★포인터변수 선언할때 * = 변수의 주소  /  포인터변수 실행문에서 * 쓸때 = 변수가 가리키는곳의 값★



a = 4 = 100
&a = 4
*b = 4 = 100



배열 : [동일한 데이터 유형]을 여러개의 변수를 하나의 이름으로 정의해 사용

배열은 변수명 뒤에 대괄호[ ]를 붙이고 그안에 사용할 개수지정 (c언어는 0부터 시작,행우선으로 데이터가 기억장소에할당)

배열의 첨자없이-> [ ] 배열 이름을 사용하면 배열의 첫번째 요소의 주소를 지정하는것과 같음


int a=50;
int *b; b의 주소값이 생김  
b=&a; 1000 (a의 실제 주소)
*b=*b+20; 50 + 20 =70
printf("%d, %d", a, *b);
결과값 : 70, 70




포인터와 배열
- 배열을 포인터변수에 저장후 포인터를이용해 배열의 요소에 접근

int a[5], *b;
B=a         <-  배열의 첨자를 안적었으니 defaulf값으로 시작주소인 a[0] 자동선택 / a[0]의 시작주소를 변수B에 저장
 - 대표명 or 첨자가없는 기본값에는 & 를 붙이지 않아도 시작주소 저장의 뜻과 같다
B=&a[0] = a[0]의 주소를 변수B에 저장

포인터 표기법  *(a+0) *(a+1) *(a+2) *(a+3) *(a+4)

main()
{
int a[5];
int i;
int *p;
for (1=0; i<5; i++)
   a[i]=i+10;
p=a;
for (i=0; i<5; i++)
   printf("%d", *(p+i));
}

profile

우주먼지

@o귤o

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그