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 *= 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
Posted by misty_
,