# 字符指针与函数

下面两种定义方式中， `str1` 是一个仅仅足以存放初始化字符串以及空字符 `\0` 的一维数组，数组中的单个字符可以进行修改，但 `str1` 始终指向同一个存储位置。而 `str2` 是一个指针，其初值指向一个字符串常量，之后它可以被修改以指向其他地址。

```c
#include <stdio.h>

int main(int argc, char const *argv[])
{
    char str1[] = "Hello World!";
    char *str2 = "Hello World!";
    return 0;
}
```

执行下面的代码，实现字符串复制功能。

```c
#include <stdio.h>

int main(int argc, char const *argv[])
{
    char str1[] = "Hello World!";
    char str2[] = "Welcome!";
    char *p, *q;
    p = str1;
    q = str2;
    while ((*p = *q) != '\0')
    {
        p++;
        q++;
    }
    printf("%s\n", str1);
    return 0;
}
```

