printf("ho_tari\n");

C언어(4) 본문

(Telechips) AI 시스템 반도체 SW 개발자 교육/C

C언어(4)

호타리 2025. 2. 21. 16:52

2025.02.21

 

배열과 포인터의 차이점

 

1. sizeof 연산의 결과가 다르다.

2. 변수와 상수의 차이가 있다.

 

 

  주소
포인터 *b b
변수 a &a

 

double ary[5] = { 1.2, 3.5, 7.4, 0.5, 10.0 };

double *pa = ary;

double *pb = ary + 2;

 

ary배열 100 108 116 124 132

                 1.2  3.5  7.4  0.5  10.0

 

ary = 100

*(ary + 1)= 3.5

pa + 2 = 116

pa[3] = 0.5

*pb = 7.4

pb - pa = 16

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

/*
int main(void) {
	int array[4];

	for (int i = 0; i < 4; i++)
	{
		printf("array[%d]의 주소 = %u\n", i, &array[i]);
	}
	return 0;
}*/

/*
int main(void) {
	int ary[3];
	int i;

	// &ary[0] = ary 주소는 같음
	// *(&ary[0]) = *ary = ary[0] 값은 같음
	
	// ary + 1 = &ary[0] + 1 = &ary[1] 
	// *(ary + 1) = *(&ary[0] + 1) = *(&ary[1]) 주소가 가르키는 위치의 값은 모두 같음

	*(ary + 0) = 10;
	*(ary + 1) = *(ary + 0) + 10;

	printf("세번째 배열 요소에 키보드 입력 : ");
	scanf("%d", ary + 2);

	for (i = 0; i < 3; i++)
	{
		printf("%5d", *(ary + i));
	}

	return 0;
}
*/

/*
int main(void) {
	int ary[3];
	int* pa = ary;
	int i;

	*pa = 10;
	*(pa + 1) = 20;
	pa[2] = pa[0] + pa[1];

	for (i = 0; i < 3; i++)
	{
		printf("%5d", pa[i]);
	}
	return 0;
}*/

/*
int main(void) {
	int ary[3] = { 10, 20, 30 };
	int* pa = ary;
	int i;

	for (i = 0; i < 3; i++)
	{
		printf("%5d", *(pa++));
	}
	return 0;
}*/

/*
int  main(void) {
	int ary[5] = { 10, 20, 30, 40, 50 };
	int* pa = ary;
	int* pb = pa + 3;

	printf("pa : % u\n", pa);
	printf("pb : 5u\n", pb);
	pa++;
	printf("pb - pa : %u\n", pb - pa);

	printf("앞에 있는 배열의 요소의 값을 출력 : ");
	if (pa < pb)
	{
		printf("%d\n", *pa); // pa와 pa의 주소를 비교하여 작은 주소의 값을 출력
	}
	else
	{
		printf("%d\n", *pb);
	}

	return  0;
}*/

/*
void print_ary(int* pa);

int main(void) {
	int ary[5] = { 10, 20, 30, 40, 50 };

	print_ary(ary);

	return 0;
}

void print_ary(int* pa) {
	int i;

	for (i = 0; i < 5; i++)
	{
		printf("%d ", pa[i]);
	}
}*/

/*
void print_ary(int* pa, int size);

int main(void) {
	int ary1[5] = { 10, 20, 30, 40, 50 };
	int ary2[7] = { 10, 20, 30, 40, 50, 60, 70 };

	print_ary(ary1, 5);
	printf("\n");
	print_ary(ary2, 7);

	return 0;
}

void print_ary(int* pa, int size) {
	int i;

	for (i = 0; i < size; i++)
	{
		printf("%d ", pa[i]);
	}
}*/

/*
void input_ary(double* pa, int size);
double find_max(double* pa, int size);

int main(void) {
	double ary[5];
	double max;
	int size = sizeof(ary) / sizeof(ary[0]);

	input_ary(ary, size);
	max = find_max(ary, size);
	printf("배열의 최댓값 : %.1lf\n", max);

	return 0;
}

void input_ary(double* pa, int size) {
	int i;

	printf("%d개의 실수값 입력 : ", size);
	for (i = 0; i < size; i++)
	{
		scanf("%lf", pa + i);
	}
}

double find_max(double* pa, int size) {
	double max;
	int i;

	max = pa[0];
	for (i = 0; i < size; i++)
	{
		if (pa[i] > max)
		{
			max = pa[i];
		}
	}
	return max;
}*/

/*
void print_month(int* mp) {
	int i;
	for (i = 0; i < 12; i++)
	{
		printf("%5d", mp[i]);
		if (i % 5 == 4)
		{
			printf("\n");
		}
	}
}

int main(void) {
	int month[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

	print_month(month);

	return 0;
}*/

	/*
void input_nums(int* lotto_nums);
void print_nums(int* lotto_nums);

int main(void) {
	int lotto_nums[6];

	input_nums(lotto_nums);
	print_nums(lotto_nums);

	return 0;
}

void input_nums(int* lotto_nums) {
	int num;
	int dup;

	for (int i = 0; i < 6; i++)
	{
		printf("번호 입력 : ");
		scanf("%d", &num);
		dup = 0;

		for (int j = 0; j < i; j++)
		{
			if (lotto_nums[j] == num)
			{
				dup = 1;
				break;

			}
		}
		if (!dup)
		{
			lotto_nums[i] = num;
		}
		else
		{
			printf("같은 번호가 있습니다!\n");
			i--;
		}
	}

}

void print_nums(int* lotto_nums){
	int i;
	printf("로또 번호 : ");

	for (i = 0; i < 6; i++)
	{
		printf("%d   ", lotto_nums[i]);
	}

}*/

/*
void input_nums(int* lotto_nums);
void print_nums(int* lotto_nums);

int main(void) {
	int lotto_nums[6];

	input_nums(lotto_nums);
	print_nums(lotto_nums);

	return 0;
}

void input_nums(int* lotto_nums) {
	int count = 0;
	while (1) {
		int num;
		_Bool check = 0;
		printf("번호 입력 : ");
		scanf("%d", &num);
		if (num < 1 || num > 45)
		{
			printf("범위를 초과했습니다.\n");
			check = 1;
		}
		for (int i = 0; i < count; i++)
		{
			if (num == lotto_nums[i]) 
			{
				printf("같은 번호가 있습니다!\n");
				check = 1;
				break;
			}
		}
		if (check == 0)
		{
			lotto_nums[count++] = num;
			if (count == 6)
			{
				break;
			}
		}
	}
}

void print_nums(int* lotto_nums) {
	int i;
	printf("로또 번호 : ");

	for (i = 0; i < 6; i++)
	{
		printf("%d   ", lotto_nums[i]);
	}

}*/

/*
int main(void) {
	printf("%d, %c\n", 97, 97);
	printf("%d, %c\n", 'a', 'a');

	return 0;
}*/

/*
int main(void) {
	char small, cap = 'G';

	if ((cap >= 'A') && (cap <= 'Z'))
	{
		small = cap + ('a' - 'A');
	}
	printf("대문자 : %c %c", cap, '\n');
	printf("소문자 : %c", small);

	return 0;
}*/

/*
int main(void) {
	int ch;

	ch = getchar();
	printf("입력한 문자 : ");
	putchar(ch);
	putchar('\n');

	return 0;
}*/

/*
int main(void) {
	char ch;

	printf("문자 입력 : ");
	ch = getchar();
	printf("%c문자의 아스키 코드 값 : %d", ch, ch);

	return 0;
}*/

/*
int main(void) {
	char ch;
	int i;

	for (i = 0; i < 3; i++)
	{
		scanf("%c", &ch);
		printf("%c", ch);
	}

	return 0;
}*/

/*
int main(void) {
	int res;
	char ch;

	while (1) {
		res = scanf("%c", &ch);
		if (res == -1)
		{
			break;
		}
		printf("%d ", ch);
	}

	return 0;
}*/

/*
void my_gets(char* str, int size);

int main(void) {
	char str[7];

	my_gets(str, sizeof(str));
	printf("입력한 문자열 : %s\n", str);

	return 0;
}

void my_gets(char* str, int size) {
	int ch;
	int i = 0;

	ch = getchar();
	while ((ch != '\n') && (i < size - 1))
	{
		str[i] = ch;
		i++;
		ch = getchar();
	}
	str[i] = '\0'; // 문자열 마지막에 널기호 추가
}*/

/*
int main(void) {
	int num, grade;

	printf("학번 입력 : ");
	scanf("%d", &num);
	getchar();
	printf("학점 입력 : ");
	grade = getchar();
	printf("학번 : %d, 학점 : %c", num, grade);

	return 0;
}*/

/*
int main(void) {
	int ch;
	int cnt = 0;
	ch = getchar();

	while (ch != '\n')
	{
		if (ch >= 'a' && ch <= 'z')
		{
			cnt++;
		}
		ch = getchar();
	}

	printf("소문자의 개수 : %d\n", cnt);

	return 0;
}*/

/*
int main(void) {
	char ch;
	int len, max = 0;

	while (1)
	{
		ch = getchar();
		if (ch == -1)
		{
			break;
		}
		len = 0;
		while (ch != '\n')
		{
			len++;
			ch = getchar();
		}
		if (len > max)
		{
			max = len;
		}

	}
	printf("가장 긴 단어의 길이 : %d\n", max);
	return 0;
}*/

/*
int main(void) {
	printf("apple이 저장된 시작 주소 값 : % p\n", "apple");
	printf("두 번째 문자의 주소 값 : %p\n", "apple" + 1);
	printf("첫 번째 문자 : %c\n", *"apple");
	printf("두 번째 문자 : %c\n", *("apple" + 1));
	printf("배열로 표현한 세 번째 문자 : %c\n", "apple"[2]);

	return 0;
}*/

/*
int main(void) {
	char* dessert = "apple";

	printf("오늘 후식은 %s입니다.\n", dessert);
	dessert = "banana";
	printf("내일 후식은 %s입니다.\n", dessert);

	return 0;
}*/

/*
int main(void) {
	char str[80];

	printf("문자열 입력 : ");
	scanf("%s", str);
	printf("첫 번째 단어 : %s\n", str);
	scanf("%s", str);
	printf("버퍼에 남아 있는 두 번째 단어 : %s\n", str);

	return 0;
}*/

/*
int main(void) {
	char str[80];

	printf("공백이 포함된 문자열 입력 : ");
	gets(str);
	printf("입력한 문자열은 %s입니다.", str);

	return 0;
}*/

#include <string.h>

/*
int main(void) {
	char str[80];

	printf("공백이 포함된 문자열 입력 : ");
	fgets(str, sizeof(str), stdin);
	str[strlen(str) - 1] = '\0';
	printf("입력된 문자열은 %s입니다.\n", str);

	return 0;
}*/

/*
int main(void) {
	int age;
	char name[20];

	printf("나이 입력 : ");
	scanf("%d", &age);

	// getchar();
	// scanf("%*c");
	fgetc(stdin);
	printf("이름 입력 : ");
	gets(name);
	printf("나이 : %d, 이름 : %s\n", age, name);

	return 0;
}
*/

/*
int main(void) {
	char str[80] = "apple juice";
	char* ps = "banana";

	puts(str);
	fputs(ps, stdout);
	puts("milk");

	return 0;
}*/

/*
char* my_gets(char *ps) {
	int i = 0;
	static char str[20];
	char ch;

	do
	{
		ch = getchar();
		ps[i] = ch;
		i++;
	} while (ch != '\n');

	ps[--i] = '\0';

	// ps = str;
}

int main(void) {
	char str[80];

	my_gets(str);
	printf(str);

	return 0;
}
*/

/*
int main(void) {
	char* ps = "applepie";
	ps += 5;
	printf("%s", ps);

	return 0;
}*/

/*
int main(void) {
	char ani[20];
	char why[80];

	printf("좋아하는 동물 : ");
	scanf("%s", ani);

	fgetc(stdin);

	printf("좋아하는 이유 : ");
	fgets(why, sizeof(why), stdin);
	printf("%s is %s", ani, why);

	return 0;
}*/

/*
int main(void) {
	char str[20] = "mango tree";

	strncpy(str, "apple-pie", 5);
	str[5] = '\0';
	printf("%s\n", str);

	return 0;
}*/

/*
int main(void) {
	char str[80] = "straw";

	strcat(str, "berry");
	printf("%s\n", str);
	strncat(str, "piece", 3);
	printf("%s\n", str);

	return 0;
}*/

/*
int main(void) {
	char str1[80], str2[80];
	char* resp;

	printf("2개의 과일 이름 입력 : ");
	scanf("%s%s", str1, str2);

	if (strlen(str1) > strlen(str2))
	{
		resp = str1;
	}
	else
	{
		resp = str2;
	}
	printf("이름이 긴 과일은 : %s\n", resp);

	return 0;
}*/

/*
int main(void) {
	char str1[80] = "pear";
	char str2[80] = "peach";

	printf("사전에 나중에 나오는 과일 이름 : ");

	if (strcmp(str1, str2) > 0)
	{
		printf("%s\n", str1);
	}
	else
	{
		printf("%s\n", str2);
	}

	return 0;
}*/

/*
char* my_strcpy(char* pd, char* ps);

int main(void) {
	char str[80] = "strawberry";

	printf("바꾸기 전 문자열 : %s\n", str);
	my_strcpy(str, "apple");
	printf("바꾼 후 문자열 : %s\n", str);
	printf("다른 문자열 대입 : %s\n", my_strcpy(str, "kiwi"));

	return 0;
}

char* my_strcpy(char* pd, char* ps) {
	char* po = pd;

	while (*ps != '\0')
	{
		*pd = *ps;
		pd++;
		ps++;
	}
	*pd = '\0';

	return po;
}*/

/*
int main(void) {
	char str1[80] = "straw,hello,hi";
	char str2[80] = { 0 };

	char* word1 = strchr(str1, ',');
	strncpy(str2, str1, word1 - str1);
	printf("%s\n", str2);

	word1++;
	char* word2 = strchr(word1, ',');
	strncpy(str2, word1, word2 - word1);
	printf("%s\n", str2);

	return 0;
}*/

/*
int main(void) {
	char str1[80] = "straw,hello,hi";
	char str2[80] = { 0 };

	// strcpy, strncpy, strcat, strncat
	// strchr : 문자열에서 특정 문자가 시작되는 위치의 주소를 반환한다.
	// strtok : 문자열을 특정 문자로 분리하여 반환한다.

	char* token = strtok(str1, ",");

	printf("%s\n", token);

	token = strtok(NULL, ",");

	printf("%s\n", token);

	return 0;
}
*/

0221.c
0.01MB

'(Telechips) AI 시스템 반도체 SW 개발자 교육 > C' 카테고리의 다른 글

C언어(5)  (0) 2025.02.24
C언어(3)  (0) 2025.02.20
C언어(2)  (0) 2025.02.19
C언어(1)  (0) 2025.02.18