三行代码搞定字符数组与字符指针的区别

都说字符数组是对字符常量的一份拷贝,而字符指针,是指向字符常量的一个地址。那么事实如何呢?

#include <stdio.h>
#include <stdlib.h>
/*
三行代码明确字符数组与字符指针的关系。 
*/
int main(void)
{
    char str[] = "Hello world!";
    char *pStr = "Hello world!";

    printf("str首地址 = %p\n*pstr地址 = %p\n\"Hello world!\"地址 = %p\n",str,pStr,"Hello world!");
    return 0;
}

打印结果显示:

str首地址 = 000000000024FE40
*pstr地址 = 0000000000404020
"Hello world!"地址 = 0000000000404020

Process exited normally.
Press any key to continue . . .

通过打印结果可知,字符数组的确不再是原来的字符常量了。而字符指针,依然和原来的字符常量存在于同一地址空间。所以,传言为真。
即:字符数组是对字符常量的一份拷贝,而字符指针,是指向字符常量的一个地址。

所以,如果我们对上面的str执行移位操作,会编译失败,而对pStr做移位就是ok的。
* 现象如下:

#include <stdio.h>
#include <stdlib.h>
/*
三行代码明确字符数组与字符指针的关系。 
*/
int main(void)
{
    char str[] = "Hello world!";
    char *pStr = "Hello world!";

    printf("str首地址 = %p\n*pstr地址 = %p\n\"Hello world!\"地址 = %p\n",str,pStr,"Hello world!");
    // str++;  // 出错!因为数组一旦初始化就不能被改变
    pStr++;// 正确 ! 
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值