본문 바로가기
정리/C

[c] 배열과 포인터, 다차원 배열

by 멘멘 2023. 4. 2.

배열

배열을 사용하지 않은 경우

#include <stdio.h>

int main(void){
	
    int subway_1 = 30;
    int subway_2 = 40;
    int subway_3 = 50;
    printf("지하철 1호차에 %d명이 타고 있다.",&subway_1);
    printf("지하철 2호차에 %d명이 타고 있다.",&subway_2);
    printf("지하철 3호차에 %d명이 타고 있다.",&subway_3);

	return 0;
}

배열을 사용한 경우

#include <stdio.h>

int main(void){

    int subway_array[0] = 30;
    int subway_array[1] = 40;
    int subway_array[2] = 50;
    
    for (int i =0; i<3; i++){
    	printf("지하철 %d호차에 %d명이 타고 있다.",i+1,subway_array[i]);
    }

	return 0;
}

 

배열의 특징

  • 값 초기화 필수 (초기화하지 않을 시 쓰레기값이 들어감)
  • 배열 크기 항상 상수 선언 필요
  • 값을 하나라도 선언하면 나머지 값은 0으로 초기화

 

문자 / 문자열

문자 문자열
char c = 'A'; char str[7] = "coding";
  *문자열 긑에는 null문자 포함 (글자수 + 1 차지)

 

포인터

포인터 사용 예시

#include <stdio.h>

int main(void){

	int AA = 1;
    printf("AA의 주소 : %d, 값 : %d",&AA,AA);
    
	int * pointer; //포인터 변수
    pointer = &AA;
    printf("포인터의 방문 주소: %d, 값: %d",pointer, *pointer);
    
    *pointer = *pointer * 3 // AA = AA * 3
    printf("포인터가 값을 바꾼 주소: %d, 값: %d",pointer, *pointer);
    
    printf("AA의 주소 : %d, 값 : %d",&AA,AA);
    
	return 0;
}
더보기

[출력 결과]

AA의 주소 : 2310558, 값 : 1

포인터의 방문 주소 : 2310558, 값 : 1

포인터가 값을 바꾼 주소 : 2310558, 값 : 3

AA의 주소 : 2310558, 값 : 3

 

포인터와 배열의 관계

#include <stdio.h>

int main(void){
	
    int arr[3] = {5,10,15};
    int *ptr = arr;
    for(int i = 0; i<3; i++){
    	print("포인터 ptr[%d] 의 값: %d\n",i,ptr[i]);
    }
    ptr[0] = 100;
    ptr[1] = 200;
    ptr[2] = 300;
    
    
    for(int i = 0; i<3; i++){
    	print("포인터 ptr[%d] 의 값: %d\n",i,*(arr+i));
    }
    for(int i = 0; i<3; i++){
    	print("포인터 ptr[%d] 의 값: %d\n",i,*(ptr+i));
    }
    
    //*(arr+i) == arr[i] == *(ptr+i)

	return 0;
}
더보기

[출력 결과]

포인터 ptr[1]의 값: 5

포인터 ptr[2]의 값: 10

포인터 ptr[3]의 값: 15

포인터 ptr[1]의 값: 100

포인터 ptr[2]의 값: 200

포인터 ptr[3]의 값: 300

포인터 ptr[1]의 값: 100

포인터 ptr[2]의 값: 200

포인터 ptr[3]의 값: 300

 

*과 &

* &
주소

*과 &을 동시 사용하면 상쇄됨

 

 

활용 (swap)

#include <stdio.h>

void swap(int * a, int * b);

int main(void){

	int a = 10;
    int b = 20;
    
    swap(&a,&b);
    printf("%d %d",a,b);

	return 0;
}

void swap(int * a, int * b)
{
	int temp = *a;
    *a = *b;
    *b = temp;
}
더보기
[출력 결과] 20 10

 

 

다차원 배열

#include <stdio.h>

int main(void){
	
    int arr2[2][5]; //2차원 배열
    //[0,0][0,1][0,2][0,3][0,4] -> arr2[0][0]
    //[1,0][1,1][1,2][1,3][1,4]
    
    
    int arr3[3][3][3]; //3차원 배열
    
    arr2[2][5] = {{1,2,3,4,5},{1,2,3,4,5}};
    arr3[3][3][3] = {
    	{
		    {1,2,3},
    		{1,2,3},
    		{1,2,3}
    	},
    	{
    		{1,2,3},
    		{1,2,3},
    		{1,2,3}
    	},
    	{
    		{1,2,3},
    		{1,2,3},
    		{1,2,3}
    	}
    };
    

	return 0;
}

1차원 배열과 기본적인 원리는 같다.

'정리 > C' 카테고리의 다른 글

[c] 연결 리스트  (0) 2023.05.28
[c] 연결 리스트  (0) 2023.05.14
[c] 재귀  (0) 2023.05.07
[c] 자료구조와 알고리즘의 이해  (0) 2023.04.09
[c] c언어 시작하기  (0) 2023.03.26

댓글