char p[] 和char *p的区别

正文

char p[]和char *p

用作变量定义:
char p[]="abcd";
char *p="abcd";
可能引起重名问题。都是可以的,含义也一样。


char p[]="abcd",char *p1;
前者是一个字符数组,内存中有一定的存放字符的空间;
后者只是一个指针,里面存放了一个地址,这个地址是一个存放字符的地址。

如果它们用作函数的参数,都可以用一个数组的名称或其中某元素的地址做参数。但是前者不能改变这个数组的内容,只能引用;后者可以改变数组的内容。

例子:

 1 void a(char *cmd)
 2 {
 3     int t;
 4     char str[10]; // xxx
 5     if (sscanf(cmd, "%s%u", str, &t))
 6     {
 7         printf_unify("!!!test start :str = %s, t = %u\n\n", str, t);
 8         my_test(t);
 9     }
10     else
11     {
12     printf("-------ERROR-\n\n");
13     }
14 }
15 void main()
16 {
17     char cmd[10] = "test 1";
18     a(cmd);
19 }
View Code

上面的代码中 xxx 处 必须采用 char p[],而不是 char *p.因为前者是分配了内存空间的可以存放数据,后者只是指向一个数据的存放地址。

以下是错误的例子

void a(char *cmd)
{
    int t;
    char *str; // xxx
    if (sscanf(cmd, "%s%u", str, &t))
    {
        printf_unify("!!!test start :str = %s, t = %u\n\n", str, t);
        my_test(t);
    }
    else
    {
    printf("-------ERROR-\n\n");
    }
}
void main()
{
    char cmd[10] = "test 1";
    a(cmd);
}
View Code

 

posted @ 2021-11-19 16:23  年华似水゛  阅读(878)  评论(0)    收藏  举报