欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

4·C语言---字符串类型笔记(面试)

时间:2023-04-29

1·C语言中其实没有原生字符串类型,是通过字符指针来间接实现的。

2·C语言使用指针来管理字符串
2·1 C语言定义字符串的方法:

char *p = "hellow";

这里的p就叫做字符串,但是实际上p只是一个字符指针(本质就是一个指针变量,只是p指向了一个字符串的首地址)。

2·2 C语言的字符串的本质:
指针指向头、固定尾部 的 地址相连 的一段内存。
我的理解:C语言中字符串的3个核心要义:第一是用一个指针指向字符串头,第二是固定尾部(字符串总是以’‘来结尾),第三是注册字符串的各个字符的地址连续。

’‘ 的asic码值为0,与十进制的0不同。十进制的0对应asic码值为48.
’‘ 表示字符串的结尾标志,所以字符串中无法包含’‘ 。这个数就叫“魔数”。

2·3 指向字符串的指针 与 字符串 本身是分开的两个东西
(1)char *p = “Linux”;
在这句代码中,p本质是是一个字符指针,占4字节;”Linux“分配在代码段,占6字节(还要算上一个 ’‘ )实际上一共消耗10字节,p叫做字符串指针,可以理解为是字符串的引子,但是p本身不是字符串,而5字节的Linux才是真正的字符串,最后以斜杠0结尾。( 是用来字符串的结尾标志,是不属于字符串的,它不属于字符串,但是计算字节时要算上它)

2·4 字符数组 与 字符串的差异
(1) 字符数组 char a[ ] = “Linux”;
定义了一个数组,数组a占6字节,右值”Linux“ 本身只存在于编译器中,编译器将它用来初始化字符数组a后丢掉(也就是说内存中是没有”Linux“这个字符串的);这句话相当于是:char a[ ] = {‘l’,‘i’,‘n’,‘u’,‘x’,’’};
(2)字符串char *p = “linux”;
定义了一个字符指针p占4字节,分配在栈上(前提是p定义在 一个函数里面,当作局部变量);同时还定义了一个字符串”Linux“,分配在代码段;然后把代码段中的字符串的首地址(也就是 ‘l’ 的地址)赋值给p。

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。