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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #include <iostream> using namespace std; int slen(char* a) { int num = 0; while (a[num]) num++; return num; } void scopy(char* s, char* d) { int i = 0; while (d[i]) { s[i] = d[i]; i++; } s[i] = 0; } void sadd(char* s, char* d) { int i = slen(s); int j = 0; while (d[j]) { s[i + j] = d[j]; j++; } s[i + j] = 0; } void main() { char a[10] = "abc"; char b[10] = "ef"; char c[10]; int length; scopy(c, a); sadd(a, b); length = slen(a); cout << a << "\n"; cout << c << "\n"; cout << length << "\n"; } | cs |
배열은 사실 포인터이므로(시작 주소만 알면 뒤에도 접근할 수 있음) 포인터로 받아도 일반배열처럼 사용할 수 있다.
그렇기에 a의 주소값은 a[0]의 주소값과 같다. 즉 *a = a[0] = 'a'
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 34 35 36 37 | char* scopy2(char* x) { char* y = 0; int i = slen(x); y = new char[i + 1]; scopy(y, x); return y; } char* sadd2(char* a, char* b) { char *c = 0; int i = slen(a); int j = slen(b); // c는 a의문자열수 + b의문자열수 + 1(널값)으로 할당 c = new char[i+j+1]; scopy(c, a); sadd(c, b); return c; } void main() { char a[10] = "abc"; char b[10] = "ef"; char* f = scopy2("ACE"); cout << f << "\n"; delete[] f; char* w = sadd2(a,b); cout << w << "\n"; delete[] w; } | cs |
동적할당을 이용하여 이렇게도 만들 수 있다.
'프로그래밍 공부 > C++' 카테고리의 다른 글
Linked List (구조체 이용) (0) | 2018.03.21 |
---|---|
구조체(struct) (0) | 2018.03.21 |
정적할당과 동적할당 (0) | 2018.03.12 |
주소, 포인터 (0) | 2018.03.12 |
참조(Reference) (0) | 2018.03.12 |