728x90
1.
#include <stdio.h>
int main(void)
{
// int형 변수 data, 100 저장
int data = 100;
// 저장값, data의 주소값 출력
printf("%d %16p", data, &data);
return 0;
}
/*
100 0061FF1C
*/
2.
#include <stdio.h>
int main(void)
{
int a[5] = {1, 2, 3, 4, 5}; // 배열 a
int* p; // 포인터 p
p = &a[2]; // 포인터 p : a[2]의 주소값 저장
// 배열 원소 모두 출력
printf("%d, %d, %d, %d, %d", *(p-2), *(p-1), *p, *(p+1), *(p+2));
}
/*
1, 2, 3, 4, 5
*/
3.
#include <stdio.h>
#include <float.h> // double 자료형의 최댓값을 사용하기 위함
int main(void)
{
double a[] = {1.5, 2.3, 3.9, 4.3, 4.5, 1.3, 2.7, 3.3};
double* p = a; // a = &a[0]
// size : 배열 a의 크기 = 배열 a의 원소수
size_t size = sizeof(a) / sizeof(a[0]);
// 배열 원소의 최솟값을 저장하기 위한 변수 min
// double 자료형의 최댓값을 저장하여 초기화
double min = DBL_MAX;
int index; // 최솟값의 인덱스 저장
// p를 사용해 배열 a를 이동하면서 최솟값을 검색
for (int i = 0; i<size; i++){
if (min >= *(p + i)){
min = *(p + i);
index = i;
}
}
printf("최소 값 : 첨자 : %d, 값 : %.1f", index, min);
return 0;
}
/*
최소 값 : 첨자 : 5, 값 : 1.300000
*/
4.
#include <stdio.h>
int main()
{
int value = 0x000000FF;
int* pi = &value;
short* ps = (short*) &value; // 명시적 형변환
// printf("*pi : %#x %d\n", *pi, *pi);
// printf("*ps : %#x %d\n", *ps, *ps);
// printf("*(ps + 1) : %#x %d\n", *(ps + 1), *(ps + 1));
printf("%d\n", *pi);
*(ps + 1) = 0x000F; // 앞 2바이트에 0x000F 저장
printf("%d %d", *ps, *(ps + 1)); // 각각의 short 출력
return 0;
}
/*
255
255 15
*/
5.
#include <stdio.h>
int main(void)
{
int arr[3][4] = { {11,22,33,44},
{55,66,77,88},
{11,66,77,44} };
// 열이 4인 배열을 가리키는 포인터
int (*p)[4] = arr;
// 2차원 배열을 크기 : size
size_t size = sizeof(arr) / sizeof(arr[0][0]);
for (int i = 0; i < size; i++){
static int rows = 0; // 현재 행의 index 값
printf("arr[%d][%d] = %d ", rows, i%4, *(*p + i));
if ((i+1) % 4 == 0){ // 행이 변경될 때마다, 줄바꿈 + rows 값 +1
putchar('\n');
rows++;
}
}
return 0;
}
/*
arr[0][0] = 11 arr[0][1] = 22 arr[0][2] = 33 arr[0][3] = 44
arr[1][0] = 55 arr[1][1] = 66 arr[1][2] = 77 arr[1][3] = 88
arr[2][0] = 11 arr[2][1] = 66 arr[2][2] = 77 arr[2][3] = 44
*/
6.
#include <stdio.h>
// 포인터 배열 : 주소값을 저장하는 포인터를 배열 원소로 하는 배열
int* p[3]; // 포인터 배열 p 선언
int a[][5] = {{1,2,3,4,5},
{10,20,30,40,50},
{100,200,300,400,500}};
int main(void)
{
// 배열 이름 자체가 주소값
p[0] = a[0];
p[1] = a[1];
p[2] = a[2];
size_t row_size = sizeof(a) / sizeof(a[0]);
size_t column_size = sizeof(a[0]) / sizeof(a[0][0]);
for (int i = 0; i < row_size; i++){
for (int j = 0; j < column_size; j++){
printf("a[%d][%d] = %3d ", i, j, p[i][j]);
}
putchar('\n');
}
return 0;
}
/*
a[0][0] = 1 a[0][1] = 2 a[0][2] = 3 a[0][3] = 4 a[0][4] = 5
a[1][0] = 10 a[1][1] = 20 a[1][2] = 30 a[1][3] = 40 a[1][4] = 50
a[2][0] = 100 a[2][1] = 200 a[2][2] = 300 a[2][3] = 400 a[2][4] = 500
*/
7.
#include <stdio.h>
int main(void)
{
double x = 0x00000001;
double* ptr = &x;
int* ptr_int = (int*)&x;
printf("두 정수 입력: ");
scanf("%d %d", ptr_int, (ptr_int + 1));
printf("%d + %d = %d\n", *ptr_int, *(ptr_int + 1), *ptr_int + *(ptr_int + 1));
printf("%d - %d = %d\n", *ptr_int, *(ptr_int + 1), *ptr_int - *(ptr_int + 1));
printf("%d * %d = %d\n", *ptr_int, *(ptr_int + 1), *ptr_int * *(ptr_int + 1));
printf("%d %% %d = %d\n", *ptr_int, *(ptr_int + 1), *ptr_int % *(ptr_int + 1));
return 0;
}
/*
두 정수 입력: 30
9
num1 : 30, num2 : 9
30 + 9 = 39
30 - 9 = 21
30 * 9 = 270
30 % 9 = 3
*/
8.
#include <stdio.h>
int main(void)
{
int a[] = { 11, 22, 33, 44, 55, 66 };
int* p = a;
size_t size = sizeof(a) / sizeof(a[0]);
int* q = (a + size - 1);
// 포인터 p를 이용하여 출력
for(int i = 5; i >= 0; i--){
printf("%d ", *(p + i));
}
putchar('\n');
// 포인터 q를 이용하여 출력
for (int j = 0; j < 6; j++){
printf("%d ", *(q - j));
}
return 0;
}
/*
66 55 44 33 22 11
66 55 44 33 22 11
*/
728x90
'C Programming' 카테고리의 다른 글
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 12. 문자와 문자열 - 프로그래밍 연습 (0) | 2022.07.09 |
---|---|
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 12. 문자와 문자열 (0) | 2022.07.08 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 10. 변수 유효범위 프로그래밍 연습 (0) | 2022.07.07 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 10. 변수 유효범위 (0) | 2022.07.06 |
[C언어로 배우는 프로그래밍 기초 Perfect 3판] Chapter 14. 함수와 포인터 활용 (0) | 2022.07.04 |