字符指针动态创建字符串在使用时并不能完全取代字符数组

“hello world!”这是一个字符串常量。
他在内存中的存储时末尾自动加上‘\0’;

如果有字符数组:
char st[13] = “hello world!” 注意预留了’\0’
则他们的在内存中的存储造型一模一样

如果是这样:
char st[12] = “hello world!” 注意 此时没有预留了’\0’
此时他们在内存中的存储造型是否一模一样取决于字符数组后面的元素是否刚好为’\0’,尽管数据在内存中的存储非常稀疏,刚好遇到’\0’的几率比较大,但不应该抱有这样的侥幸去写程序,因为冒着程序有可能崩溃的风险不值得。

用指针动态创建字符串很好用
char *p;
p = “hello world!”;
但此时字符串是不允许被修改的。
比如:
p[0] = ‘M’,就是非法的
但只是打印,putchar(p[0]), 是合法的。

但如果是 char st[] = “hello world!”
st[0] = ‘M’,就是合法的。

字符指针的值是可以改变的,但是字符数组的变量名却不可以改变。
还是那上面的举例:
char *p = “hello world!”;
char st[] = “hello world!”;
p++; //合法
puts(p); //”ello world”;
st++; //不合法
如果想输出跟上面一样的效果可以这样写:
puts(&p[1]); //合法

字符数组的数组名也是指针,但它是一个常量指针,即其值不能被修改,取值的时候必须通过下标运算符取值。 而不能通过改变自己的值(指向的地址)取值。

//运用strupr实现忽略大小写,只适用于字符数组,不适于用字符指针动态创建的常量字符串
void main()
{
    char a[20], b[20], *p1 = NULL, *p2 = NULL;
    puts("请输入第一个字符串");
    gets(a);
    puts("请输入第二个字符串");
    gets(b);
    p1 = _strupr(a);
    p2 = _strupr(b);
    if(strcmp(p1, p2) == 0)
    {
        puts("相等!!!");
    }
    else
    {
        puts("不相等!!!");
    }
    //puts(_strupr("helloworld")); //不合法,字符常量不允许被改变
    getchar();
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值