배열
2차원에서 가로의 크기는 정해줘야 함
이중 포인터와 다중포인터
PPP |
PP |
P |
num A=100 |
int*** |
int** |
int* |
int |
대상의 type |
자기자신의 type |
int |
* (포인터) |
가리키는 대상 |
포인터 |
PP |
*PPP |
p |
**PPP |
B |
***PPP |
int * whoA[4]={&num1, &num2, &num3, &num4}; // 포인터 배열이고 16byte
int (*whoB)[4]=arr2d; // 배열 포인터이고 4byte
이중 포인터 예제
#include <stdio.h>
int main(void)
{
double num = 3.14;
double *ptr = #
double **dptr = &ptr;
double *ptr2;
printf("%9p %9p \n", ptr, *dptr);
printf("%9p %9p \n", num, **dptr);
ptr2 = *dptr;
*ptr2 = 10.99;
printf("%9g %9g \n", num, **dptr);
return 0;
}
|
포인터 변수에 const 선언 // const를 붙이면 해당 변수를 상수로 취급하게 된다.
#include <stdio.h>
int main()
{
char *P1="TEST";
const char *P2="TEST";
char const *P3="TEST";
char * const P4="TEST";
const char * const P5="TEST";
char const * const P6="TEST";
printf("P1=[%s], [%p]\n", P1, P1);
printf("P2=[%s], [%p]\n", P2, P2);
printf("P3=[%s], [%p]\n", P3, P3);
printf("P4=[%s], [%p]\n", P4, P4);
printf("P5=[%s], [%p]\n", P5, P5);
printf("P6=[%s], [%p]\n", P6, P6);
printf(P1="zest\n");
printf(P1="zest\n");
printf(P1="zest\n");
//printf(P4=zest);
//printf(P5=zest);
//printf(P6=zest);
return 0;
}
|
리눅스에서는 주소가 모두 같게 나온다.
Output:
P1=[TEST], [0x8048698]
P2=[TEST], [0x8048698]
P3=[TEST], [0x8048698]
P4=[TEST], [0x8048698]
P5=[TEST], [0x8048698]
P6=[TEST], [0x8048698]
zest
zest
zest |
메인 함수를 통한 인자 전달 // gcc 흉내내기
|
전달된 문자열이 하나이므로 조건에 맞는 아래 문장이 출력된다.
gcc: fatal error: no input files |
EOF (End Of File) // 파일의 끝
#include <stdio.h>
int main()
{
int ch;
while(1)
{
ch=getchar();
if(ch==EOF)
break;
putchar(ch);
}
return 0;
} |
getchar를 통해 입력버퍼의 문자를 읽어들임
enter가 입력될때까지 키보드 입력값들을 계속해서 버퍼에 저장. enter가 파일의 끝이 된다.
fprintf 함수 // 특정한 스트림에 일련의 데이터를 특정한 형식에 맞추어 쓰게 된다. 리눅스 man 3 fprintf 참조
stdout(표준출력)을 통해 test라는 글자가 출력.
printf 함수가 실제로 출력하는 것이 없고 fprintf에 지시해서 출력하는 것이라고 할 수 있다.
test |
'Study > C' 카테고리의 다른 글
섭씨->화씨 변환, 최대 공약수 구하기 (0) | 2016.05.03 |
---|---|
2016-04-07-업무일지_구조체 및 함수 (0) | 2016.04.07 |
20160405_포인터와 배열 (0) | 2016.04.05 |
20160401_전역변수와 포인터 (0) | 2016.04.04 |
20160329_C기초, 디버깅 (0) | 2016.03.29 |