๐Ÿคณ [C]_23.03.24

โ€์ „ํฌ์ฃผยท2023๋…„ 3์›” 24์ผ
0

๋‹ค์šฐ_C ์ž…๋ฌธ ๊ฐ•์˜

๋ชฉ๋ก ๋ณด๊ธฐ
4/7

๋ฐฐ์—ด ํฌ์ธํ„ฐ

pointer2.c

// 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

//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

//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

// 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

// 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๋Š” ์ฒจ์ž์—†๋Š” ๋ฐฐ์—ด ๋ณ€์ˆ˜, ๋ฌธ์ž์—ด์€ ํ–‰์˜ ์ฃผ์†Œ๋งŒ ์ฐพ์•„๋„ ๋ฐ์ดํ„ฐ ์ฐพ์•„ ๊ฐˆ ์ˆ˜ ์žˆ์Œ
    *(*word + 0) : k

pointer6.c

// 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 ๋Š” ๋ช…๋ น์–ด ๋ผ์ธ ์ธ์ˆ˜
    • cf. date๋Š” ์ธ์ž ํ•„์š” ์—†๋Š” ๋ช…๋ น์–ด
    • ํ”„๋กœ๊ทธ๋žจ ์„ฑ๊ฒฉ์— ๋”ฐ๋ผ ์ธ์ž ํ•„์š” ์—ฌ๋ถ€ ๋‹ค๋ฆ„
    • ์šฐ๋ฆฌ๋Š” ์ธ์ž ํ•„์š” ์—†๋Š” ํ”„๋กœ๊ทธ๋žจ ์ž‘์„ฑ
  • ๐Ÿ”ฝ

    • ํ•˜๋‚˜์˜ ๋ฌธ์ž๋กœ ์ทจ๊ธ‰ => " "
    • ๋ฌธ์ž๋ฅผ ์ˆซ์ž๋กœ ๋ฐ”๊พธ๊ธฐ : atoi ํ•จ์ˆ˜ ํ™œ์šฉ ๊ฐ€๋Šฅ

main_arg1.c

//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;
}
  • cmd ์ƒ ๊ฒฐ๊ณผ ํ™•์ธ
    ๐Ÿ”ฝ
    ๐Ÿ”ฝ

ref

  • count+1 = &count[1] = ptr+1
  • *(count+1)=count[1]=*(ptr+1)

input_checkpoint.c

//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

//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);
	}
}
profile
heejoojeon@daou.co.kr

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด