1. 세 변수를 아래와 같이 설정하여, 변수의 값과 주소를 출력하는 프로그램을 작성하
라.
int inumber = 25
float fnumber = 34.5
char ch = 'g'
#include <stdio.h>
int main() { int iNum = 25; float fNum = 34.5; char ch = 'g'; printf("iNum : %d \t&iNum : %p\n", iNum, &iNum); printf("fNum : %3.2f \t&fNum : %p\n", fNum, &fNum); printf("ch : %c \t&ch : %p\n", ch, &ch); return 0; }
|
2. 위의 세 변수를 가리키는 포인터 변수를 각각 설정하여, 포인터 변수를 이용해서 세 값을 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main() { int iNum = 25; int *ip; float fNum = 34.5; float *fp; char ch = 'g'; char *cp;
ip = &iNum; fp = &fNum; cp = &ch; printf("iNum(*ip) : %d \t\t&iNum(ip) : %p\n", *ip, ip); printf("fNum(*fp) : %3.2f \t&fNum(fp) : %p\n", *fp, fp); printf("ch(*cp) : %c \t\t&ch(cp) : %p\n", *cp, cp); return 0; }
|
2. float 형 변수 fnumber를 38.9로 설정한 다음, fnumber의 각 바이트의 내용을 아스 키 코드로 출력하라.//한번 해볼 것-문자로 출력 가능하게 할 수 있을지.
// %c로 문자를 출력해보려 했는데, 의도한 문자가 // 안나와서 txt파일에다 출력해봤습니다. 그래도 결과는 마찬가지.. // 콘솔창에선 확장 아스키 코드가 안먹히나 봅니다. #include <stdio.h>
int main() { float fNum; // 음수로 인식하지 않도록 부호없는 포인터로 선언 unsigned char uch, *ucp; char cCnt; FILE *fp;
fNum = 38.9f; ucp = (unsigned char *)&fNum; // write.txt파일을 생성. write.txt가 없어도 만듬. fp = fopen("write.txt", "w"); // 에러처리부분. 없어도 될 코드일듯.. // if(0 == fp) // { // printf("write.txt파일을 찾을 수 없습니다.\n"); // return 0; // }
// 매 루프마다 1 byte씩 포인터를 이동하여 그 값을 16진수와 문자로 찍어줌 for (cCnt = 0; cCnt < 4; ++cCnt) { uch = *(ucp + cCnt); printf("%02X %c\n", *(ucp + cCnt), *(ucp + cCnt)); // write.txt 에 써주는 부분 fprintf(fp, "%02X %u %c\t", uch, uch, uch); } putchar('\n');
// 파일 포인터를 닫아준다. fclose(fp); return 0; }
|
|
3. int 형의 변수 inumber의 값을 키보드로부터 읽어서 설정한 다음, 포인터 변수를 이 용해서 inumber의 값을 두 배로 만들어서 출력하는 프로그램을 작성하라.
#include <stdio.h>
int main() { int iNum; int *ip; fprintf(stdout, "정수 하나를 입력하세요 : "); fscanf(stdin, "%d", &iNum);
ip = &iNum; fprintf(stdout, "두 배로 돌려드립니다 : %d", (*ip)*2);
return 0; }
|
4. 포인터 변수의 저장 공간의 크기를 출력하는 프로그램을 작성하라.
// 굳이 포인터 변수를 선언할 필요가 없네요;; #include <stdio.h>
int main() { char *cp; short *sp; int *ip; float *fp; double *dp; long *lp; void *vp;
cp = NULL; sp = NULL; ip = NULL; fp = NULL; dp = NULL; lp = NULL; vp = NULL;
// 포인터 변수를 사용하여 알아보기 printf("char형 포인터의 크기 : %dbytes\n", sizeof(cp)); printf("short형 포인터의 크기 : %dbytes\n", sizeof(sp)); printf("int형 포인터의 크기 : %dbytes\n", sizeof(ip)); printf("float형 포인터의 크기 : %dbytes\n", sizeof(fp)); printf("double형 포인터의 크기 : %dbytes\n", sizeof(dp)); printf("long형 포인터의 크기 : %dbytes\n", sizeof(lp)); printf("void형 포인터의 크기 : %dbytes\n", sizeof(vp));
// 포인터 자료형으로만 알아보기 printf("\nchar형 포인터의 크기 : %dbytes\n", sizeof(char *)); printf("short형 포인터의 크기 : %dbytes\n", sizeof(short *)); printf("int형 포인터의 크기 : %dbytes\n", sizeof(int *)); printf("float형 포인터의 크기 : %dbytes\n", sizeof(float *)); printf("double형 포인터의 크기 : %dbytes\n", sizeof(double *)); printf("long형 포인터의 크기 : %dbytes\n", sizeof(long *)); printf("void형 포인터의 크기 : %dbytes\n", sizeof(void *));
return 0; }
|
5. 주소값을 저장하는 변수를 포인터 변수 라고 한다.
6. 포인터 변수가 아무 것도 가리키지 않고 있는 것을 설정할 때는 NULL 을 넣는다.