10.1 字符串(1)

接下来简单地说一说字符串.

内容在书11.1, 11.2章.

1. 什么是字符串

字符串是一个char类型的数组,还需要一个标志,即最后一个元素应该是"\0"这个空字符.

C语言用"\0"表示字符串的结束,"空字符不是0,是非打印字符,ASCII码值(或者说等价于)0"(72页),比如说这个字符串有64个字符,那么容纳它的数组容量必须是64+1=65.

int main(void) {
    char str1[]  = "12345";
    char str2[5] = "12345";
    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);
    printf("sizeof 未指定容量char数组str1: %d\n", sizeof str1);
    printf("sizeof 已指定容量char数组str2: %d\n", sizeof str2);
    return 0;
}

运行结果

str1: 12345
str2: 12345
sizeof 未指定容量char数组str1: 6
sizeof 已指定容量char数组str2: 5

可以看到在不指定元素数量的情况下,5个字符的字符串实际上占用了6个字节的空间,多出来的那1字节就是"\0"了.

2. 指针和字符串

因为字符串本质是一个数组,所以指针自然也是可以使用的,而且字符串绝大多数操作都是通过指针完成的.

比如下面的程序,可以想想输出内容都是什么.

int main(void) {
    const char * str1 = "12345678";  
    const char * str2 = str1;

    printf("str1: %s\n", str1);
    printf("str2: %s\n", str2);
    
    printf("指针地址:&str1 = %p, &str2 = %p\n", &str1, &str2);
    printf("指针的值: str1 = %p, str2 = %p\n", str1,  str2);
    return 0;
}

运行结果

str1: 12345678
str2: 12345678
指针地址:&str1 = 000000000022FE48, &str2 = 000000000022FE40
指针的值: str1 = 0000000000404000, str2 = 0000000000404000

内容都是一样的,这个结果应该没有悬念.

指针地址也是不一样的,因为这本来就是两个指针,肯定存在于不同的空间.

但是指针的却是一样的."指针的值就是它存储的地址"(329页).这说明两个指针指向同一个位置.所以实质上

    const char * str2 = str1;

就是把str2这个指针指向str1指向的字符串.

指针这两个概念要区分开.指针地址表示"这个指针存在于这个地址",指针的值表示"指针指向这个地址".

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值