// pointer2.c
#include <stdio.h>
int main()
{
int count[3][4] = {1,2,3,4,5,6,8,9,10,11,12};
int i, j;
// ๋ฐฐ์ด ์ ์ฒด ํฌ๊ธฐ, ํ์ ํฌ๊ธฐ,
printf("%d, %d, %d \n", sizeof(count), sizeof(count[0]), sizeof(count[0][0]));
// 2์ฐจ์ ๋ฐฐ์ด์์ ์ฒจ์ 1๊ฐ => ํ์ ์ฃผ์ ๋ํ๋
printf("%d, %p, %p, %p, %p, %p \n", count[0][0], &count[0][0],
count, count[0], count[1], count[2]);
// 2์ฐจ์ ๋ฐฐ์ด ์ถ๋ ฅ, ์ฃผ์: ๋ฐ์ดํฐ (ํ๋ง๋ค ์ค๋ฐ๊ฟ)
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
printf("%p: %3d, \t", &count[i][j], count[i][j]);
printf("\n");
}
printf("\n");
for (i = 0; i < 3; i++)
{
for (j = 0; j < 4; j++)
printf("%p: %3d, \t", *(count + i) + j, *(*(count+i)+j));
printf("\n");
}
return 0;
}
//pointer3.c
#include <stdio.h>
int main()
{
int a, b[3], x1[4][5], x2[3][7], x3[2][5];
int* p1; // ํฌ์ธํฐ๋ณ์ : ๋ณ์์ ์์์ฃผ์์ด๊ฑฐ๋ ๋๋ 1์ฐจ์ ๋ฐฐ์ด์ ์์์ฃผ์๊ฐ ๋์
// 2์ฐจ์ ๋ฐฐ์ด ํฌ์ธํฐ (๋ณ์) : 2์ฐจ์ ์ ์ํ ๋ฐฐ์ด ์ค ์ด์ ํฌ๊ธฐ๊ฐ 5์ด์ธ ๋ฐฐ์ด์ ์์์ฃผ์๊ฐ ๋์
int(*p2)[5]; // ๋ค์ [] ํ๋ ๋ ์์ผ๋ฉด 3์ฐจ์ ๋ฐฐ์ด ํฌ์ธํฐ
p1 = &a;
p1 = b;
p1 = x1; // ์ฌ๊ธฐ์๋ถํฐ ์ธ์ค -> p1๊ณผ x1 ํ์์ด ๋ค๋ฅด๋ฏ๋ก ์๋ฌ
p1 = x2;
p1 = x3;
p2 = &a;
p2 = b;
p2 = x1; // ์ด ์๋ง ํ์
(ํ์ ์๊ด X) / 1์ฐจ์ ๋ฐฐ์ด์ด๊ฑฐ๋ ์ด ์๊ฐ ๋ค๋ฅด๋ฉด ์๋ฌ (๋ณ์๋ ๋ฐฐ์ด์ ์ฃผ์๋ง ์ ์ฅ) -> 1, 2, 4๋ฒ์งธ ์๋ฌ
p2 = x2;
p2 = x3;
printf("%d, %d \n", sizeof(p1), sizeof(p2));
printf("p2: %u \n", p2);
p2++; // ์ ์ธ๋ฌธ์ ๋ฐ๋ผ ํ ๋น๋ ์ฃผ์๊ฐ์ ์ฆ๊ฐ ๋ฒ์๋ ๋ค๋ฆ. ์ด ๊ฒฝ์ฐ ๋ณ์ ์ ์ธ๋ฌธ์ 5์ด๋ก ์ ์ => 20byte์ฉ ์ฃผ์ ๋ฒ์ ์ฆ๊ฐ
printf("p2: %u \n", p2);
p2++;
printf("p2: %u \n", p2);
return 0;
}
//pointer4.c
#include <stdio.h>
#include <string.h>
int main()
{
char word[10][30] = { "kingdom", "Advanced C", "Hello World",
"C++ Programming", "Python Programming", ""};
wordOutput(word);
return 0;
}
// word ๋ฐฐ์ด์ ๋ฌธ์์ด์ ์ถ๋ ฅํ์์ค
wordOutput(char (*ptr)[30]) // 2์ฐจ์ ๋ฐฐ์ด ํฌ์ธํฐ ๋ณ์ ์ ์ธ (์ด์ ํฌ๊ธฐ๊ฐ 30์ด์ธ ๋ฐฐ์ด์ ์์์ฃผ์๋ฅผ ์ ์ฅ, ๋ฐฐ์ด ์ฃผ์๋ฅผ ์ ์ฅํ๊ธฐ ์ํ 4๋ฐ์ดํธ๋ฅผ ํ ๋น๋ฐ๋๋ค. )
{
while ((*ptr)[0] != '\0') // while(*ptr) : ํ ์์ ์ฃผ์ ์ง์นญ // while((*ptr)[0]) => 0ํ์ 0์ด, kim์ 1byte์ธ k๋ฅผ ์ง์นญ, ๋ฌธ์์ด " " null์ ๋ง๋๋ฉด ์ข
๋ฃ => (๋ฌธ์ ๋ฐฐ์ด์ " " ์ด ์ด๋ฏธ ๋์
๋ผ ์์)
{
printf("%u: %s \n", *ptr, *ptr);
ptr++;
}
/*for (int i = 0; ptr[i][0]; i++)
{
printf("%u: %s \n", ptr[i], ptr[i]);
}
*/
}
// pointer5.c
#include <stdio.h>
int main()
{
int num[5] = { 100,200,300,400,500 }, i;
int* ptr[5]; // ํฌ์ธํฐ ๋ฐฐ์ด => ๋ฐฐ์ด ์์ ๊ฐ์๋งํผ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ํ 20byte
//int(*ptr2)[5]; // ๋ฐฐ์ด ํฌ์ธํฐ ๋ณ์ 4 byte
char word[3][20] = { "kingdom", "prince", "princess" };
char* ptr2[3];
printf("ptr sizeof: %d \n", sizeof(ptr));
for (i = 0; i < 5; i++)
ptr[i] = num + i;
//ptr[i] = &num[i];
for (i = 0; i < 5; i++)
printf("%d ,", *ptr[i]);
printf("\n");
//๋ฌธ์์ด ์ถ๋ ฅ
for (i = 0; i < 3; i++)
ptr2[i] = word + i;
//ptr2[i] = *(word + i);
for (i = 0; i < 3; i++)
printf("%s, %c\n", ptr2[i], *ptr2[i]); // i=0 => *ptr2[0] : 'k' ์ง์นญ(1byte) // %s => ๋ฐ์ ๋ฌธ์์ด๋ถํฐ \0๊น์ง ์ถ๋ ฅ
printf("\n");
return 0;
}
sizeof ์ํ ๋ฌธ์ ์ถ์
char* ptr2[3]; => 4bytex3 =12 byte
char word[3][20] => 3x 20x1byte = 60byte
ptr2[0] : 'k' ์ง์นญ(1byte) // %s => ๋ฐ์ ๋ฌธ์์ด๋ถํฐ \0๊น์ง ์ถ๋ ฅ
// Array7.c
#include <stdio.h>
void scoreCalc(int(*ptr)[7], int row, int col);
int main()
{
int score[5][7] = { // 4๋ฐ์ดํธ ์์์ฃผ์ 3000
{90, 57, 74, 80},
{60, 50, 84, 60},
{70, 77, 68, 90},
{80, 97, 70, 51},
{57, 55, 54, 70},
};
int i, j, row, col;
row = sizeof(score) / sizeof(score[0]);
col = sizeof(score[0]) / sizeof(score[0][0]);
scoreCalc(score, row, col);
// ๋ฐ์ดํฐ ์ถ๋ ฅ
heading();
for (i = 0; i < 5; i++)
{
for (j = 0; j < 7; j++)
printf("%3d ", score[i][j]);
printf("\n");
}
return 0;
}
void scoreCalc(int(*ptr)[7], int row, int col)
{
int i, j;
printf("scoreCalc() : %d, %p, row : %d, col : %d \n", sizeof(ptr), ptr, row, col);
// ํฉ, ํ๊ท ๊ตฌํ๊ธฐ
for (i = 0; i < 5; i++)
{
for (j = 0; j < 4; j++)
// ํฉ
ptr[i][4] += ptr[i][j]; //ํฌ์ธํฐ ๋ณ์๊ฐ ๋ฐฐ์ด์ ์ฃผ์๋ฅผ ํฌํจํ๊ณ ์๋ค๋ฉด ๋ฐฐ์ด์ฒ๋ผ ์ฌ์ฉ๋ ๊ฐ๋ฅ
//*(*(ptr + i) + 4) += *(*(ptr + i) + j);
// ํ๊ท
*(*(ptr + i) + 5) = *(*(ptr + i) + 4) / col;
}
// ์์ฐจ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ
for (i = 0; i < 5; i++)
{
ptr[i][6] = 1;
for (j = 0; j < 5; j++)
{
if (ptr[i][5] < ptr[j][5])
ptr[i][6]++;
}
}
}
heading()
{
printf("===================================\n");
printf("๊ตญ์ด ์์ด ์ํ ๊ณผํ ์ด์ ํ๊ท ์์ฐจ \n");
printf("===================================\n");
}
๐ฝ
*
word => 0ํ์ ๊ธฐ์
๋ ๋ชจ๋ ๋ฌธ์ ์ถ๋ ฅ ("kingdom")*
(*
word + 0) : k// pointer6.c
#include <stdio.h>
int main()
{
//char* ptr = "kingdom test"; // ๋ฌธ์์ด์ ์ฃผ์๋ง ์ ์ฅ (๋ฌธ์์ด์ ๊ฐ๊ณ ์์ง์์)
char* ptr[] = { "kingdom test","Advance C programming", "C++ programming", "one two three", "multi campus",
"seoul ์์ธ์ ๊ฐ๋จ๊ตฌ ์์ฌ๋ 100๋ฒ์ง", "busan ๋ถ์ฐ์ ํด์ด๋๊ตฌ ํด์ด๋๋ ๋ฐ๋ค 2๋ฒ์ง", NULL}; // sizeof(char* ptr[5]) => 20byte // sizeof(char* ptr[]) => 20byte (unsized)
int i=0;
printf("ptr sizeof : %d \n", sizeof(ptr));
// ๋ฌธ์์ด์ NULL์ด ์์ผ๋ฏ๋ก, NULL pointer ๋ง๋ ๋๊น์ง ์ถ๋ ฅ
//ptr ๋ฐฐ์ด ๋ณ์๋ ํฌ์ธํฐ ์์์ด๊ธฐ ๋๋ฌธ์ ptr++ ๊ธฐ์ฌ ๋ถ๊ฐ -> i ๋ณ์ ์ถ๊ฐํด์ ๊ณ ๋ ค ํ (๋ฐฐ์ด ๋ณ์ ์์ ์ ์์ ์ฃผ์๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒ์ ํ์ฉํ์ง ์๋๋ค)
while (*(ptr +i))
{
printf("%p: %s \n", *(ptr + i), *(ptr + i));
i++; // ์ฃผ์๋ฅผ 4byte ์๋ ์๋ฃํ ํฌ๊ธฐ(1byte)๋งํผ ์ฆ๊ฐ์ํด
}
//for๋ฌธ ์์ฑ ๋ฐฉ๋ฒ
/*for (int i = 0; ptr[i]; i++)
{
printf("%p: %s \n", ptr[i], ptr[i]);
}
*/
return 0;
}
// ์๋ชป๋ ์
//p1 = ptr;
//while (*p1)
//{
// printf("%p: %s \n", *p1, *p1);
// p1++; // ์ฃผ์๋ฅผ 4byte ์๋ ์๋ฃํ ํฌ๊ธฐ(1byte)๋งํผ ์ฆ๊ฐ์ํด
//}
cmd ์ ๊ฒฐ๊ณผ ํ์ธ
๐ฝ
์ธ์ ์
๋ ฅ์ ํตํด, copy ๋ช
๋ น์ ํตํ ๋ชฉ์ ํ์ผ ๋ณต์ฌ
๐ฝ
pointer1.obj p1.obj
๋ ๋ช
๋ น์ด ๋ผ์ธ ์ธ์ date
๋ ์ธ์ ํ์ ์๋ ๋ช
๋ น์ด ๐ฝ
//main_arg1.c
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char* argv[]) // int main(int argc, **argv)
{
int i, num;
double dnum;
printf("argc : %d \n", argc);
for (i = 0; i < argc; i++)
printf("%p: %s \n", argv[i], argv[i]);
printf("\n");
num = atoi(argv[1]); // ํจ์๋ง๋ค ์ฐธ์กฐํ๋ ํค๋ ํ์ผ ๋ค๋ฆ -> stdlib.h ํ์
dnum = atof(argv[2]);
printf("%d + %lf = %lf \n", num, dnum, num + dnum);
return 0;
}
- count+1 = &count[1] = ptr+1
*
(count+1)=count[1]=*
(ptr+1)
//input_checkpoint.c
#include <stdio.h>
#include <stdlib.h>
/*
์๊ธ์ด 0์ด ์
๋ ฅ๋๋ฉด ์๊ธ์ ์ถ๋ ฅ,
์๊ธ์ด 0~7000000๋ฒ์๋ฅผ ๋์ด๊ฐ๋ฉด ๋ค์ ์
๋ ฅ์ ์๊ตฌํ๋ค.
*/
int main()
{
int salary;
char tmp[100];
do {
printf("input salary ? ");
gets(tmp); //4500000, sample
salary = atoi(tmp);
} while (!salary || salary >= 7000000 || salary <= 0);
// !salary=> ์ ์ํ์ด ์๋์ ๊ฐ ๋ค์ด์ค๋ฉด ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋๋ ค๋ณด๋ด๊ฒ ๋ค
printf("salary : %d \n", salary);
return 0;
}
//input_checkpoint.c
#include <stdio.h>
#include <stdlib.h>
/*
์๊ธ์ด 0์ด ์
๋ ฅ๋๋ฉด ์๊ธ์ ์ถ๋ ฅ,
์๊ธ์ด 0~7000000๋ฒ์๋ฅผ ๋์ด๊ฐ๋ฉด ๋ค์ ์
๋ ฅ์ ์๊ตฌํ๋ค.
*/
int main()
{
int salary;
char tmp[100];
do {
printf("input salary ? ");
gets(tmp); //4500000, sample
if (tmp[0] == '0')
{
salary
break;
}
salary = atoi(tmp);
} while (!salary || salary >= 7000000 || salary <= 0);
printf("salary : %d \n", salary);
return 0;
}
//str_check.c
#include <stdio.h>
#include <stdlib.h>
#include <stdlib.h>
int main()
{
int salary, age;
char name[20], comAddr[50];
str_check("์ฑ๋ช
", sizeof(name), name);
num_check("๋์ด", 1, 100, &age);
num_check("์๊ธ", 0, 7000000, &salary);
str_check("ํ์ฌ์ฃผ์", sizeof(comAddr), comAddr);
printf("%s, %d, %d, %s \n",
name, age, salary, comAddr);
return 0;
}
//๋ฌธ์์ด์ ํ ๋น๋ฒ์๋ฅผ ๋์ผ๋ฉด ๋ค์ ์
๋ ฅ
str_check(char* name, int size, int* addr)
{
if (name == "์ฑ๋ช
")
{
do {
printf("input name ? ");
gets(addr);
} while (sizeof(addr) > size);
}
if (name == "ํ์ฌ์ฃผ์")
{
do {
printf("input com_addr ? ");
gets(addr);
} while (sizeof(addr) > size);
}
}
//๊ฐ์ ๋ฒ์๋ฅผ ๋์ผ๋ฉด ๋ค์ ์
๋ ฅ
num_check(char* name, int firstline, int lastline, int* addr)
{
char tmp[100];
if (name == "๋์ด")
{
do {
printf("input age ? ");
gets(tmp);
*addr = atoi(tmp);
} while (!(*addr) || *addr >= lastline || *addr <= firstline);
}
if (name == "์๊ธ")
{
do {
printf("input salary ? ");
gets(tmp);
*addr = atoi(tmp);
} while (!(*addr) || *addr >= lastline || *addr <= firstline);
}
}