C/C++ 的 char 字符类型

文章目录

      • char
      • char []
      • char*
        • 验证
        • 输出
        • 说明
      • char* []
      • 字符串常量
      • 总结

char 是 C 语言中一种常见的字符类型,在使用过程中,会出现 char*、char []、char* [] 这些形式。

char

char 是 C/C++ 中的一种可容纳单个字符的数据类型,通过 sizeof 运算符可知该类型只占 1 个字节,取值范围为 -128 ~ +127 (-2^7 ~ 2^7-1)。初始化的字符需要用单引号引起来,并且只能是一个字符。

char ch = 'a';			

char []

由于 C 语言中没有字符串类型,因此为了表示一个字符串需要使用字符数组,即定义一个数组内元素为 char 类型的数组。

char str[] = "hello"; 	// 定义一个字符数组str,数组中每个元素都是char类型字符
cout << sizeof(str);	// 输出 6

需要注意的上述定义的字符数组 str 占用的是 6 个字节,数组内有5个字符,每个字符占用一个字节,还有一个隐含的字符终止符 ‘\0’,因此共占用 6 个字节。

char*

首先定义一个 char* 类型的指针 p,该指针指向的是 char 对象,即指针指向的值为 char 类型。这里将前面定义的数组名拿来给指针 p 初始化。数组名可以表示数组的首地址,而指针 p 需要的正是地址解引用会得到 char 类型对象的地址,因此可以将数组名 str 赋值给指针 p。

char* p = str;		

数组名可以表示数组的首地址,也可以通过 &str[0] 的方式获取数组的首地址。

验证

数组名可以表示数组的首地址

#include 
#include 

using namespace std;

int main() {

	char str[] = "hello";
	char* p = str;	// 数组名可以表示字符串首元素的地址,指针p指向的是数组的首元素,指针本身的值是数组首地址
	char* p2 = &str[0];

	printf("str的地址: %p\n", str);
	printf("p的地址为: %p\n", p);
	printf("p2的地址:  %p\n", p2);

	return 0;
}

输出

C/C++ 的 char 字符类型_第1张图片

说明

通过以上实测可以得知,数组名可以表示可以数组首元素的地址,char* 类型的指针指向的是字符串的首地址。

char* []

char* strs[] = {"China", "American", "Russia"}

[] 的优先级高于 * ,strs与 [] 结合表示 strs 是一个数组,因此 char* strs[] 表示的是数组内存放的是 char*,char* 是一个地址。

字符串常量

C/C++ 会把字符串常量存储到单独的一块内存区域,当多个指针指向同一个字符串常量时,它们实际指向的都是同一块内存地址,因为char* 型指针指向的是字符串的首地址,相同的字符串常量首地址一样。
用相同的字符串常量去初始化不同的数组,则会开辟不同的内存空间。

#include 
#include 
using namespace std;

int main() {
    char str1[] = "abcde";
    char str2[] = "abcde";
    
    const char* p1 = "abcde";
    const char* p2 = "abcde";
    
    // 指向同一个字符串常量的指针 相等
    if (p1 == p2) {		// 输出 True
        cout << "True" << endl;
    }
    else {
    	cout << "False" << endl;   
    }
    
    // 
    if (str1 == str2) {	// 输出 False
        cout << "True" << endl;
    }
    else {
        cout << "False" << endl;
    }
    
    return 0;
}

总结

  • C语言中没有字符串类型,C中用的是字符数组即char str[]=“hello” 表示的字符串,需要注意字符数组中隐含一个字符终止符 ‘\0’;
  • 在不同位数的计算机中,一个指针(地址)占用的内存是不同的,32位电脑占4位,64位电脑占8位;
  • 数组名可以用来表示字符串数组的首地址,char* 保存的是字符串的首地址。

你可能感兴趣的:(C/C++基础小知识,c++,c语言)