일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- @PatchMapping
- spring
- @GetMapping
- 업로드
- Java
- 인텔리j
- 마이크로서비스
- FTP
- sftp
- @PutMapping
- @DeleteMapping
- 클라우드 네이티브 자바
- @PostMapping
- 파일업로드
- @RequestMapping
- 마스터링 스프링 클라우드
- Spring MSA
- 인텔리제이
- Microservice
- MSA
- IntelliJ
- Today
- Total
zerofunc
사용자 정의 함수 응용 - 문자열 이어붙이기 (포인터) 본문
이번 예제는 사용자 정의 함수를 이용한 (포인터도!)
Call By Reference이다
Reference란 참조라는 뜻이다.
말그대로
Call By Reference를 사용하면
다른지역에 있는 녀석을 갓다가 쓸수있다.
이것을 사용할때에는
메인에서 주소값을 주고
사용자 함수에서는 그것을 포인터로 받아야한다.
포인터로 받을때는 char *st혹은 ,char st[]또는 int *num 등으로 사용할수있다.
넘겨줄때는 주소를 넘겨줘야하므로
정수,실수형 변수일때는 &를 붙여서 주소를 줘야한다.
문자열같은경우엔 그냥 넘겨주면 맨처음 주소를 가르키기때문에
&를 안붙여도 된다.
그러한 이유로 scanf를 쓸때도 &를 빼고 입력을 받는것이다.
이번에 할 예제는 입력받은 수만큼 뒤에 s1뒤에 s2를 이어 붙이는거다
예제를 보자
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | #include <stdio.h> #include <conio.h> char *str_ncat(char *s1, char *s2, int n){ char *tmp=s1; while(*s1++); while(n--) { if(!(*s1++=*s2++)) { break; } } return tmp; } void main(){ char arr1[100]={0,}; char arr2[100]={0,}; int n; printf("s1 : "); gets(arr1); printf("s2 : "); gets(arr2); printf("이어 붙일수:"); scanf("%d",&n); printf("%s",str_ncat(arr1,arr2,n)); getch(); } | cs |
위의 예제를 보자면
char형으로 선언해 char형으로 리턴을한다.
gets(s1)을 통해 입력받은걸 arr1에 넣어준고 arr2도 똑같이 한다음에
str_ncat을 써서 arr1과 arr2와 입력받은 수를 넘겨준다.
char *tmp로
s1의 위치를 백업해논다.
그다음
while(*s1++); 이것은
s1이 NULL이될때까지 주소를 더하는것이다.
while(n--){
if(!(*s1++=*s2++))
break;
}
이것은 입력받은 수만큼
while문을 수행하면서
if(!(*s1++=*s2++)) 이것은
s1은 지금 NULL값이 위치했기에
s1의 s2의 현재 값을 넣는다.
그리고 그값이 NULL(s2의 끝) 이라면 break로 탈출하고
아니면 n이 0이될때까지 반복이된다.
'IT > C언어' 카테고리의 다른 글
사용자 정의 함수 - 작은값 (0) | 2013.11.30 |
---|---|
반복문 응용 - 최대값구하기 ! (삼항연산자) (0) | 2013.11.30 |
반복문 - for문 (0) | 2013.11.30 |
반복문 - While (0) | 2013.11.30 |
C언어 기초 - 연산자 (0) | 2013.11.29 |