본문 바로가기
컴퓨터 언어/C\C++

[c 언어] 배열에 원소 값 삽입하기 ( memmove() 이용하기 )

by SuperMemi 2020. 4. 3.
반응형

c 언어 에서 배열 중간에 값을 넣을 수 있을까?

 

memmove() 를 이용한다면 가능하다.

 

memmove(목적지,복사시작위치,복사할byte) 복사할 byte만큼 배열 뒤쪽에서 부터 복사한다.

 

int list로 선언했기 때문에 배열의 한자리는 4byte씩 메모리를 차지한다.

#include <string.h>
#include <stdio.h>
#include <stdlib.h>

void Insert(int idx,int list[], int searchnum)	 // insert 함수를 만들어서 값을 복사한 후 뒤쪽에 붙임.
{
	
	memmove(list + idx + 1, list + idx, sizeof(int) * (6-idx));   // memmove(목적지,복사시작위치,복사할byte)를 이용하여 이동시킨다.
	list[idx] = searchnum;			// 원하는 원소 값을 넣는다.
}

void main(void)
{
	int list[7] = { 1,4,9,15,30,0,0 };	// list는 list[0] ~ list[6] 까지 있다.
	Insert(3, list, 10);			// list[3]자리에 10의 값을 넣기위해, 
    						// list[3~6]을 memmove를 통해 복사한 후 list[4~6]에 붙여넣는다.
	for (int i = 0; i < 7; i++) {
		printf("%d ", list[i]);		// 결과값 : 1 4 9 10 15 30 0 
	}
}
        

 

정확히 말하자면 원소값을 넣고싶은 배열위치 뒤쪽의 원소값들을 복사 한 후에 한칸씩 이동시켜서 붙여넣기한 것이다.

 

 

사진

https://www.geeksforgeeks.org/c-programming-language/

반응형