#include <stdio.h>
#include <string.h> // 문자열 처리와 관련된 함수가 들어있는 헤더파일
void main ( )
{
char *name[3];
char a[] = "korea";
char b[] = "japan";
char c[] = "china";
name[0] = a;
name[1] = b;
name[2] = c;
printf("name[0] = %s\n", name[0]); // "korea"
printf("name[1] = %s\n", name[1]); // "japan"
printf("name[2] = %s\n", name[2]); // "china"
printf("name[0][0] = %c\n", name[0][0]);
printf("name[0][1] = %c\n", name[0][1]);
printf("name[0][2] = %c\n", name[0][2]);
printf("name[0][3] = %c\n", name[0][3]);
printf("name[0][4] = %c\n", name[0][4]);
}
/*
void main ( )
{
int *ip[3]; // int *변수가 3칸짜리 배열로 만들어 진다.
int a = 10, b = 20, c = 30;
ip[0] = &a;
ip[1] = &b;
ip[2] = &c;
printf(" ip[0][0] = %d\n", ip[0][0]); //10
printf(" ip[1][0] = %d\n", ip[1][0]); //20
printf(" ip[2][0] = %d\n", ip[2][0]); //30
}
*/
/*
void copy(char *x, char *y)
{
while(*y!=NULL)
*x++ = *y++;
*x = NULL;
}
void main ( )
{
*/
/*char name[11] = "대한민국";
puts(name); // 대한민국
puts(name+1); // 대한민국
puts(name+2); // 대한민국
puts(name+3); // 대한민국
puts(name+4); // 대한민국
*/
/*
char name[11] = "korea";
puts(name); // korea
copy(name, "banana");
puts(name); // banana
strcpy(name, "KOREA"); // KOREA
puts(name);
}
*/
/*
void myprint(char *x)
{
while(*x!=NULL)
putchar(*x++);
printf("\n");
}
void main ( )
{
char name1[6] = {'K', 'O', 'R', 'E', 'A', NULL};
char name2[6] = {'K', 'O', 'R', 'E', 'A', '\0'};
char name3[6] = {'K', 'O', 'R', 'E', 'A'};
char name4[6] = "KOREA";
char name5[] = "KOREA";
// char name6[5] = "KOREA"; // 에러 : 배열 오버플로우
// char name7[5] = {'K', 'O', 'R', 'E', 'A'}; // 불안전 문자열
puts(name5);
printf("%s\n", name5);
myprint(name5);
printf("문자열을 입력 하세요 : ");
gets(name5); // gets로 문자열 입력받는 방법
printf("문자열을 입력 하세요 : ");
scanf("%s", name5); // scanf로 문자열 입력받는 방법
printf("%s\n", name5);
}
*/
/*
void main ( )
{
int arr[2][3] = { {10,20,30}, {40,50,60} };
int (*ip)[3]; // int [3] 전체를 가리킬수 있는 포인터 변수 ip
ip = arr;
printf("arr = %p\n", arr); // 이차원 배열의 이름은 한행 전체를
printf("arr+1 = %p\n", arr+1); // 가리키는 포인터 상수
printf("*arr = %p\n", *arr); // 이차원 배열의 이름을 역참조하면
printf("*arr+1 = %p\n", *arr+1); // 일차원 배열에 대한 포인터가 된다.
printf(" *(*(arr+0)+0) = %d\n", *(*(arr+0)+0)); // arr[0][0]
printf(" *(*(arr+0)+1) = %d\n", *(*(arr+0)+1)); // arr[0][1]
printf(" *(*(arr+0)+2) = %d\n", *(*(arr+0)+2)); // arr[0][2]
printf(" *(*(arr+1)+0) = %d\n", *(*(arr+1)+0)); // arr[1][0]
printf(" *(*(arr+1)+1) = %d\n", *(*(arr+1)+1)); // arr[1][1]
printf(" *(*(arr+1)+2) = %d\n", *(*(arr+1)+2)); // arr[1][2]
}
*/
/*
void main( )
{
int arr[3] = { 10, 20, 30};
int *ip;
ip = arr;
// arr = ip; // 배열의 이름은 포인터 상수 임으로 값을 변경할 수 없다.
printf(" arr = %p\n", arr);
printf("&arr[0] = %p \n ", &arr[0]);
printf("*arr = %d\n", *arr); // 배열의 이름은 배열에 있는 첫번째 원소
// ([0] 원소)의 주소값을 가지는 포인터다.
printf("*(arr+0) = %d\n", *(arr+0)); // 10, *(arr+0) == arr[0]
printf("*(arr+1) = %d\n", *(arr+1)); // 20, *(arr+1) == arr[1]
printf("*(arr+2) = %d\n", *(arr+2)); // 30, *(arr+2) == arr[2]
printf("ip[0] = %d\n", ip[0]); // 10
printf("ip[1] = %d\n", ip[1]); // 20
printf("ip[2] = %d\n", ip[2]); // 30
ip = ip +2; // ip는 변수임으로 값을 변경할수 있다.
printf("ip[-2] = %d\n", ip[-2]); // 10
printf("ip[-1] = %d\n", ip[-1]); // 20
printf("ip[0] = %d\n", ip[0]); // 30
}
*/
/*
void func(double x, double *dp, double *dp2, double **dp3 )
{
x = 2.5;
*dp = 3.5;
*dp2 = 4.5;
**dp3 = 5.5;
}
void main ( )
{
double a = 1.5;
double *dp = &a;
func( a, &a, dp, &dp );
printf("a = %lf\n", a);
}
*/
/*
void main ( )
{
int a = 10;
short b = 20;
int *ip = &a; // int *변수 ip를 만들어 a의 주소값을 보관시킨다.
short *sp = &b; // short *변수 sp를 만들어 b의 주소값을 보관시킨다.
int **ip2; // 중첩포인터 ip2, int *의 주소값을 저장할수 있는 포인터 변수
int ***ip3; // 삼중첩포인터 ip3, int **의 주소값을 저장할수 있는 포인터 변수
ip2 = &ip; // 중첨포인터 ip2에 ip의 주소값을 보관시킨다.
printf(" a = %d\n", a); // a의 값인 10이 출력된다.
printf("&a = %p\n", &a); // a의 주소값이 출력된다.
printf(" b = %d\n", b); // b의 값인 10이 출력된다.
printf("&b = %p\n", &b); // b의 주소값이 출력된다.
printf("%d, %d\n", sizeof(ip), sizeof(sp)); // 모든 포인터 변수는 크기가 4byte이다.
printf(" ip = %p\n", ip); // ip의 값이 출력된다.
printf("&ip = %p\n", &ip); // ip의 주소값이 출력된다.
printf("*ip = %d\n", *ip); // ip의 역참조 값이 출력된다.
printf(" sp = %p\n", sp); // sp의 값이 출력된다.
printf("&sp = %p\n", &sp); // sp의 주소값이 출력된다.
printf("*sp = %d\n", *sp); // sp의 역참조 값이 출력된다.
printf("\n");
printf(" ip + 1 = &p\n", ip+1); // 포인터 변수는 +1할때 마다 자신이
printf(" ip + 2 = &p\n", ip+2); // 주소값을 저장할수 있는 변수의
printf(" ip + 3 = &p\n", ip+3); // 크기만큼 증가한다.
printf(" sp + 1 = &p\n", sp+1);
printf(" sp + 2 = &p\n", sp+2);
printf(" sp + 3 = &p\n", sp+3);
printf(" ip2 = &p\n", ip2); // ip2의 값 (ip의 주소값)이 나온다.
printf("&ip2 = &p\n", &ip2); // ip2의 주소값이 나온다.
printf(" *ip = %p\n", *ip2); // ip2의 역참조값(==ip의 값 ==a의 주소값)이 나온다.
printf("**ip = %p\n", **ip2); // 10이 나온다.
}
*/
'매니저 > C' 카테고리의 다른 글
20120312 학원 (0) | 2012.03.12 |
---|---|
C언어 2011.08.28 (미검사) (0) | 2011.10.13 |
C언어 2011.08.22 (미검사) (0) | 2011.10.13 |
C언어 2011.08.21 (미검사) (0) | 2011.10.13 |
C언어 2011.08.07 (미검사) (0) | 2011.10.12 |