Language/C

[포스코 AI·Big Data 아카데미 사전학습] 컴퓨터 공학 입문 1-8_① 배열과 구조

inji_ 2023. 6. 8. 15:47

1-8 배열과 구조체

  ①  배열과 함수

 

    •  배열(arrays)이란?

      - 배열의 필요성 : 여러개의 데이터 한 번에 선언하고 각각의 데이터에 접근하여 처리할 수 있는 방법이

                                  필요함 

    •  배열선언과 메모리

      - 배열명 a은 그 자체가 주소이기에 &가 없어도 주소를 의미한다

         a= &a[0] / a+1 = &a[1]

         a[2]=70; == *(a+2) 70; // a[2]에 있는 값을 70으로 바꿀 때!

 

    •  배열 예제

#include<stdio.h>

/*배열 예저*/ 
int main()
{
	int score[5] = {10,20,30,40,50};
	int i, n, sum=0;
	 
	n = sizeof(score)/sizeof(int); //배열원소의 수
	
	printf("\n ** score 배열**\n");
	
	for(i=0;i<n;i++)
	{
		printf("score[%d] = %d\n", i, score[i]);// 배열원소의 값 
	}
    
	printf("\n ** score 배열주소**\n");
	
    for(i=0;i<n;i++)
	{
		printf("score[%d]의 주소 = %d\n", i, &score[i]);// 배열 원소의 주소 
	}
	
    for(i=0;i<5;i++)
    {
    	sum+=score[i];   	
	}
	printf("\n배열합: %d", sum ); //배열 원소 합 
	
}

    •  배열과 함수

      -  함수를 이용한 배열의 합 구하기 문제

         

#include<stdio.h>
void add_arrays(const int a[], const int b[], int absum[],int n);

int add_arrays(int x[],int y[]);

int main()
{
	int x[]={10,20,30,40,50};
	int y[]={45,55,33,28,35};  
	
	int xysum[]={0};
	int i,n=5;

	printf("\n x 배열원소 출력\n");
	for(i=0;i<5;i++)
	{
	printf("x[%d]=%d\n",i,x[i]); 
	}
	
	printf("\n y 배열원소 출력\n");
	for(i=0;i<5;i++)
	{
	printf("y[%d]=%d\n",i,y[i]); 
	}
	
	add_arrays(x,y,xysum,n);//함수호출 
	
	printf("\n xysum 배열원소 출력\n");
	for(i=0;i<5;i++)
	{
	printf("xysum[%d]=%d\n",i,xysum[i]); 
	}
	
}



void add_arrays(const int a[], const int b[], int absum[],int n) 
//absum은 그대로 주소를 가리키니까  주소에 가서 값 바꿔줌 
//매개 변수가 배열이라서 포인터로도 사용할 수 있음 
{  
	for(int i=0;i<n;i++)
	{
	absum[i]= a[i]+b[i];
	}
}

      - 함수에 배열을 넘기면 주소가 넘어가지만 원본 배열의 값을 변경할 수 없도록 const 사용!

      - 매개변수에서 배열형식 [ ]으로 받아줄 경우, 포인터*를 쓰지 않아도 [ ] 연산자를 사용하여

        원본의 배열을 직접 접근하여 읽거나 쓸 수 있는 기능을 제공함.