Tech Blog/C and C++

C언어 - 포인터(Pointer)

EXPRESSIONS HAVE POWER 2021. 6. 9. 09:05

1.  a의 주소를 알아보기

#include <stdio.h>
// asterisk 용도 
// 1. 포인터를 선언할 때
// 2. 나중에
int main(){
    int a = 5;
    int* ptr;

    ptr = &a;

    // & -- < ampersand

    printf("address of a is %p", &a);

    return 0;
}

실행결과 

address of a is 0x7ffee8e06688

2.  Int, float, char의 크기를 알아보기.

#include <stdio.h>

int main(){
printf("Integer size : %d\n", sizeof(int));
printf("Float size : %d\n", sizeof(float));
printf("Char size : %d\n", sizeof(char));
}

실행결과

Integer size : 4
Float size : 4
Char size : 1

3.  Int, float, char의 포인터의 크기를 알아보기.

#include <stdio.h>

int main(){
printf("Integer* size : %d\n", sizeof(int*));
printf("Float* size : %d\n", sizeof(float*));
printf("Char* size : %d\n", sizeof(char*));
}

실행결과

Integer* size : 8
Float* size : 8
Char* size : 8

4.  a의  주소와 포인터를 통해 a의 값을 알아보기.

#include <stdio.h>

int main(){

int a= 5;
int* ptr;
ptr = &a;
printf("address of a is %p", &a);
printf("\nvalue of a is %d", *ptr);

}

실행결과

address of a is 0x7ffee0c1768c
value of ptr is 5

5.  포인터를 활용하여 b-a 값 도출하기.

#include <stdio.h>

int main(){

int a= 5;
int b= 10;

int* ptr;
int* ptr2;

ptr = &a;
ptr2 = &b;

printf("b - a = %d ", *ptr2-*ptr);

}

실행결과

b - a = 5

6. 포인터 이용하여  a와 b의 값 스왑하기.

#include <stdio.h>

void swap (int* num1, int* num2){

int temp;
// 스왑 부분

temp = *num1;
*num1 = *num2;
*num2 = temp;

}

int main(){

int a = 5;
int b = 10;

printf("a=%d\nb=%d",a,b);

swap(&a,&b);

printf("\n\nafter swap\n\n");
printf("a=%d\nb=%d",a,b);
}

실행결과 

a=5
b=10

after swap

a=10
b=5

7. 포인터 이용하여 

#include <stdio.h>

int main(){

	char arr[6] = {"hello"};
    
    char* ptr;
    ptr = &arr[0];
    
    printf("%c", *ptr);
    
    return 0;
}

실행결과 
h

#include <stdio.h>

int main(){

	char arr[6] = {"hello"};
    
    char* ptr;
    ptr = &arr[0];

// 연산자의 순서

    printf("%c\n", *(ptr+1));
    printf("%c", ptr[1]);
    
    return 0;
}

실행결과
e
e

#include <stdio.h>

int main(){

	char arr[6] = {"hello"};
    
    char* ptr;
    ptr = &arr[0];

// 연산자의 순서

    printf("%c\n%c\n%c\n%c\n%c", *ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4));
    
    return 0;
}

실행결과

h
e
l
l
o