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 @   年华似水゛  阅读(765)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示