1. 字符指针变量深度解析
字符指针变量是C/C++中最基础但最容易出错的指针类型之一。它的类型是char*,专门用于存储字符变量的地址。让我们从一个简单例子开始:
c复制#include <stdio.h>
int main()
{
char a = 'w';
char* ch = &a;
*ch = 'z';
printf("%c\n", a);
return 0;
}
这段代码展示了字符指针的基本用法:通过char*类型的指针ch修改了变量a的值。但真正容易让人困惑的是下面这种情况:
c复制#include <stdio.h>
int main()
{
char* pstr = "hello world";
printf("%s\n", pstr);
return 0;
}
关键理解点:这里的
pstr并不是存储了整个字符串,而是存储了字符串常量"hello world"的首字符'h'的内存地址。字符串常量在内存中以连续字符序列存储,并以'\0'结尾。
常见误区与注意事项:
- 试图修改字符串常量会导致未定义行为(通常是程序崩溃):
c复制char* p = "constant"; *p = 'C'; // 错误!尝试修改只读内存 - 正确做法是使用字符数组来存储可修改的字符串:
c复制char arr[] = "modifiable"; arr[0] = 'M'; // 合法操作
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 剑指Offer字符串笔试题深度剖析
让我们深入分析这个经典的面试题:
c复制#include <stdio.h>
int main()
{
char str1[] = "hello bit.";
char str2[] = "hello bit.";
const char* str3 = "hello bit.";
const char* str4 = "hello bit.";
if (str1 == str2)
printf("str1 and str2 are same\n"
