学习笔记分享

分享与展示个人专业知识学习笔记

0%

C语言中字符串常量的本质

在C语言中,字符串常量的直接值,实际上是一个指针,而不是这些字符本身。

可以这么理解,C语言中的字符串是一串以'\0'结尾的字符组成的数组。而数组和指针某种意义上是等价的。

也就是说,字符串常量"abcd"在表达式中实际上代表的值是该字符串第一个字符的地址。这同时也解释了为什么字符串常量可以直接赋给指针,而不能赋给数组。

测试代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>

int main(void)
{
/* 这里通过人为的错误类型赋值,得到警告信息 */
int a = "abcd";

/* 对"abcd"与指针类型进行对比操作 */
char *ptr = "abcd";

printf("ptr: %x\n", ptr);
printf("\"abcd\": %x\n", "abcd");

printf("ptr+1: %x\n", ptr + 1);
printf("\"abcd\"+1: %x\n", "abcd" + 1);

printf("*\"abcd\"=%x\n", *"abcd");
printf("*(\"abcd\"+1)=%x\n", *("abcd"+1));

if (ptr == "abcd")
{
printf("ptr==\"abcd\"\n");
}

return 0;
}

得到的警告信息说明,字符串常量实际是char *类型:

warning

输出结果如下:

result

创作不易,支持一下吧!