char * p = "abc"与const char *p = "abc"

char * p = "abc"与const char *p = "abc"的区别是什么呢?

第一个语句会产生问题:

warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]

此时我们只需要改成第二个用法警告就消失了,这是为什么呢?

我们来分别理解以下两个语句,首先要清楚的是char * p语句定义的p是一个指针变量,假设我们用的是第一个语句,那么我们所表达的意思是p的地址是abc,因此会出现问题。

而第二个语句的意思是我们定义了一个指针变量,然后改变了它指向了一个字符串常量。这样以来语句二可以拆分为两个句子,即:

1 const char * p;
2 p = "abc";

我们先声明了一个指针变量,然后改变了它所指的地址,因此错误就不存在了。

如:

复制代码
 1 #include <iostream>
 2  
 3 using namespace std;
 4  
 5  int main() {
 6     const char * p = "ab213123c";
 7     cout << p << endl;
 8     char a[] = "12344";
 9     p = a;
10     cout << p << endl;
11     p = "111";
12     cout << p << endl;
13     return 0;
14 }
复制代码

 

上述代码会输出:

ab213123c
12344
111
posted @   土豆分米猪  阅读(1449)  评论(2编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示
主题色彩