const的位置和不同位置产生的区别

一个比较经典的问题——问以下两种声明的区别:
1)  const char * p
2)  char * const p

3)  char const *p 

 这里的 const 关键字是用于修饰常量,书上说 const 将修饰离它最近的对象,所以,以上两种声明的意思分别应该是:
1)  p 是一个指向常量字符的指针,不变的是 char 的值,即该字符的值在定义时初始化后就不能再改变。
2)  p 是一个指向字符的常量指针不变的是 p 的值,即该指针不能再指向别的。

3)p是一个指针,指针保存的类型是char型,const修饰的仍然是char,因为const只能修饰变量不能够修饰 * ;所以不变的仍然是char的值


注意语法,* 读作 pointer to (指向...的指针),const (常量) 是形容词,char (变量类型) 和 p (变量名) 当然都是名词。 
1)  const char * p 读作:p is a pointer to a const char,译:p 是一个指针(变量),它指向一个常量字符(const char)
2)  char * const p 读作:p is a const pointer to a char,译:p 是一个常量指针(const p),它指向一个字符(变量)。

“const 修饰离得最近的对象”。

另外请再注意下面的情况。
先看 const int a 和 int const a,这里没有分界符 *,虽然 const 的位置不同,但意思不变,它 const 修饰的是 int,常量整数。
再看 const char * p 和 char const * p,首先以 * 分界,虽然 const 的位置改变了,但它都是在修饰 char,常量字符。

### 回答1: const 和 let 是 JavaScript 中两种声明变量的方式。 const 用于声明一个常量,即不可改变的变量。这意味着你不能再次对常量进行赋值,否则会抛出一个错误。但是,如果常量声明的是一个对象,你仍然可以修改对象的属性。 let 用于声明一个变量,允许你对变量进行重新赋值。 因此,主要区别在于,const 声明的变量不能被重新赋值,而 let 声明的变量可以被重新赋值。 示例: ``` const a = 1; a = 2; // 会抛出一个错误 let b = 1; b = 2; // 不会抛出错误 ``` 另外,const 声明的常量也必须在声明时进行初始化,而 let 声明的变量可以在声明之后再进行初始化。 示例: ``` const c; // 会抛出一个错误,因为 c 没有被初始化 let d; // 不会抛出错误,因为 d 可以在声明之后进行初始化 d = 1; ``` ### 回答2: const和let是JavaScript中用来声明变量的关键字,它们的主要区别如下: 1. 声明方式不同const用于声明一个常量,而let用于声明一个块级作用域的变量。 2. 变量的赋值:使用const声明的变量必须在声明时赋值,且一旦赋值后就不能再改变其值。而使用let声明的变量可以在声明时赋值,也可以在后续过程中重新赋值。 3. 块级作用域:使用const或let声明的变量在块级作用域内有效。块级作用域是指由一对花括号{}包裹的代码块,如if语句、循环等。在块级作用域内,使用const或let声明的变量只在该作用域中可见,外部作用域无法访问。 4. 变量提升:使用let声明的变量不会被提升至当前作用域的顶部,而是在声明的位置被绑定。这意味着在变量声明之前访问可能会导致引用错误。而使用const声明的变量也不会被提升,但在声明之前访问会报错。 5. 全局作用域:在全局作用域中使用let和const声明的变量不会成为全局对象的属性,不会被window对象所拥有。 总的来说,const用于声明常量,一旦赋值后不能再修改;而let用于声明可变的变量,在块级作用域内有效。 ### 回答3: const和let是用于声明变量的关键字,它们在JavaScript中有以下区别: 1. 作用域:const声明的变量具有块级作用域,只在声明的块内有效,而let声明的变量也具有块级作用域,但在声明之前,无法访问该变量。 2. 变量赋值:const声明的变量必须被赋予一个初始值,并且一旦赋值后,不能再对其重新赋值。而let声明的变量可以在声明之后进行赋值操作。 3. 变量的修改:const声明的变量不能被修改,即使它是一个对象或数组,也不能更改其引用地址。而let声明的变量可以被修改。 4. 提升:let声明的变量不会被提升到它们所在的块的顶部,即在声明之前使用会产生暂时性死区(Temporal Dead Zone)的错误。而const声明的变量也存在暂时性死区,但在作用域内不能重新声明同名变量。 5. 变量生命周期:const声明的变量在声明的块中存在,而let声明的变量在声明的块以及其子块中存在。 总结来说,const用于声明常量,其值在声明后不可更改,且必须初始化。而let用于声明可变的变量,其值可以在声明后重新赋值。根据需求,我们可以选择使用其中的一个关键字来声明变量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值