const的含义【转】

一听到被面试者说:“const意味着常数”,我就知道我正在和一个业余者打交道。去年Dan Saks已经在他的文章里完全概括了const的所有用法,因此ESP(译者:Embedded Systems Programming)的每一位读者应该非常熟悉const能做什么和不能做什么.如果你从没有读到那篇文章,只要能说出const意味着“只读”就可 以了。尽管这个答案不是完全的答案,但我接受它作为一个正确的答案。(如果你想知道更详细的答案,仔细读一下Saks的文章吧。)
如果应试者能正确回答这个问题,我将问他一个附加的问题:
下面的声明都是什么意思?

 

const int a;
int const a;
const int *a;
int * const a;
int const * a const;

 

/******/
前两个的作用是一样,a是一个常整型数。

第三个意味着a是一个指向常整型数的指针(也就是,整型数是不可修改的,但指针可以)。

第四个意思a是一个指向整型 数的常指针(也就是说,指针指向的整型数是可以修改的,但指针是不可修改的)。

最后一个意味着a是一个指向常整型数的常指针(也就是说,指针指向的整型数 是不可修改的,同时指针也是不可修改的)。

 

如果应试者能正确回答这些问题,那么他就给我留下了一个好印象。顺带提一句,也许你可能会问,即使不用关键字 const,也还是能很容易写出功能正确的程序,那么我为什么还要如此看重关键字const呢?我也如下的几下理由:
※ 关键字const的作用是为给读你代码的人传达非常有用的信息,实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的。如果你曾花很多时间清理 其它人留下的垃圾,你就会很快学会感谢这点多余的信息。(当然,懂得用const的程序员很少会留下的垃圾让别人来清理的。) 
※ 通过给优化器一些附加的信息,使用关键字const也许能产生更紧凑的代码。 
※ 合理地使用关键字const可以使编译器很自然地保护那些不希望被改变的参数,防止其被无意的代码修改。简而言之,这样可以减少bug的出现。

### 回答1: 在C语言中,对于const char*类型的指针换为char*类型的指针,需要使用类型换来完成。由于const char*指针指向的是一个常量字符串,即不能被修改的字符序列,因此不能直接换为char*类型的指针,否则会导致类型不匹配的错误。但是,如果我们确定换后的指针不会用于修改原始字符串时,可以使用类型强制换进行换。 例如: const char* str = "Hello World"; // 定义一个常量字符串 char* new_str = (char*)str; // 使用类型换将const char*换为char* 需要注意的是,对于类型强制换需要谨慎使用,因为它可能会导致一些潜在的问题。在进行类型换时,必须确保不会对原始字符串进行修改,否则可能会导致未定义的行为。另外,const修饰的变量本身是有原因的,它可以防止一些编程错误的发生,如果没有特殊需要,最好保持原始指针为const char*类型,不进行换。 ### 回答2: 在C语言中,将`const char*`换为`char*`是一种类型换操作,但需要注意的是,这种换会丢失原有的常量特性,因为`char*`指向的内存可以被修改。 首先,我们需要明确`const char*`和`char*`的含义。`const char*`是指向常量字符的指针,意味着通过该指针修改指向的字符是不被允许的。而`char*`是指向字符的指针,可以通过该指针修改指向的字符。 要将`const char*`换为`char*`,可以使用类型换操作符`(char*)`来实现。例如,假设有一个`const char*`类型的指针`const_str`指向一个字符串常量,可以通过以下方式进行换: ```c const char* const_str = "Hello world"; char* str = (char*)const_str; ``` 通过上面的换,`const_str`指向的字符串常量将被强制换为`char*`指针`str`,即可通过`str`指针修改指向的字符串。 值得注意的是,进行这种类型换意味着程序员需要自己负责确保换后的`char*`指向的内存不被修改为常量。在进行这种换时应谨慎,确保不会引起程序逻辑错误或错误的内存访问。 ### 回答3: 在C语言中,const char*和char*这两种类型之间的换是一种非常常见的场景。从const char*换为char*的过程实际上是将一个指向常量字符的指针换为一个指向非常量字符的指针。 在进行这种换时需要注意一些问题。由于const char*指针指向的是常量字符,即不可修改的字符,所以直接将其换为char*是不合法的。这是因为换后的char*指针可以用来修改字符的值,这可能导致程序运行出现未定义行为。 为了避免这种问题,可以采用强制类型换的方式将const char*换为char*。但是需要强调的是,这种换只有在确保const char*指针指向的字符是实际上可以修改的情况下才是合法的。否则,换后的char*指针可能会导致程序的运行错误。 总结起来,将const char*换为char*是一种常见的操作,但要确保在进行换之前,明确知道const char*指针指向的字符是否可以修改,以避免潜在的运行错误。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值