您的位置:首页 > 其它

关于const的一些小基础

2010-04-24 12:43 288 查看
直接上代码

// 字符串const.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
char *p = "1234";
char *str1 = "abcdefg";
//*str1 = 'A';//编译能过去,但是运行错误
str1 = "12345";//直接改变str1的值
cout<<"改变后的str1为:  "<<str1<<endl;//输出12345
str1 = p;//修改str1指向的指针
cout<<"改变后的str1为:  "<<str1<<endl;//输出1234
const char *str2 = "abcdefg";
char const *str3 = "abcdefg";//这两句的效果是一样的,str2和str3为一个指针,这个指针指向常量的字符串,也就是指向的内容不能改变,但是可以改变该指针的值
//str3[0] = 'A';//编译过不去,提示不能给常量复制
str2 = "12345";
cout<<"改变后的str2为:  "<<str2<<endl;
str2 = p;//可以改变指针的值
str3 = p;//可以改变指针的值
cout<<"改变后的str2为:  "<<str2<<endl;//输出12345
cout<<"改变后的str3为:  "<<str3<<endl;//输出12345
char* const str4 = "abcdefg";//这句话是声明一个char类型的const指针。也就是我们能改变指向的内容,但是指针本身的值是不能改变的
//str4 = p;//这句话编译错误,因为指针str4为不可变的
//str4 = "12345";//编译过不去
//----------------------------------------------------------------------------
//下面的这段代码理论上是可以的,但是在有的编译器上编译能过运行就有错误,后来找了半天才知道原因
//可以看这篇文章http://faq.csdn.net/read/216941.html
//这个是跟编译器的选项有关系
*str4 = 'A';//编译能过去,但是运行错误,但是这里理论上是可以的
cout<<"改变后的str4为:  "<<str4<<endl;

return 0;
}


const char * p

char const *p

两者是一样的,就是指向的内容是不可变的,但是指针本身的值可以改变

char * const p

跟上面相反指向的内容可以修改,指针本身不可以修改

但是现在的编译器都会把下面这段代码运行时会错误

char * const p = "abc";

p[0] = 'A';

理论上是可以修改的。编译器默认会把字符串当做const,这个是可以修改的,见http://faq.csdn.net/read/216941.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: