直接上代码

// 字符串const.cpp : 定义控制台应用程序的入口点。  
//  
#include "stdafx.h"  
#include 
<iostream>  
using namespace std;  
int _tmain(int argc, _TCHAR* argv[])  
{  
    
char *= "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

posted on 2010-04-24 13:36  ksqiance  阅读(271)  评论(0)    收藏  举报