在C语言中,若int a = 3;int * p =,如何初始化指针p指向变量a?
- 内容介绍
- 文章标签
- 相关推荐
本文共计353个文字,预计阅读时间需要2分钟。
在C语言中,当使用`const`关键字时,你需要特别注意对指针的引用。以下是对你提供代码片段的简化
c在C中,若:int *a=&b; // 假设b是一个整型变量int *p=a;
为什么以下两种声明方式的结果不同?const int *pp=p; // 不允许const int *const pp=p; // 允许
原因是:定义 const int *pp=p; 时,不允许对pp指向的内容进行修改,因此p不能是一个普通的指针。而 const int *const pp=p; 允许,因为它声明pp是一个指向const整型的const指针,这样p指向的内容可以被修改,但pp的指向不能改变。
给定的 const int *pp=p;,p 必须首先被隐式转换为 const int *,这意味着p指向的内容也被视为const,这是不允许的。但是,转换后的 const int * 是临时的,所以实际上是一个有效的临时指针,因此被允许使用。
在C中,如果:int a = 3; int* p = &a;
那为什么呢
const int* &pp = p;
不允许,但是
const int* const &pp = p;
被允许?
给定const int *& pp = p;,p必须首先隐式转换为const int *.但是转换后的const int *是一个临时的,它不能绑定到非const的lvalue-reference(比如const int *&).临时可以绑定到对const的lvalue-reference(比如const int * const&)(和rvalue-reference),所以const int * const& pp = p;工作良好.临时的生命周期延长到参考pp的生命周期.
本文共计353个文字,预计阅读时间需要2分钟。
在C语言中,当使用`const`关键字时,你需要特别注意对指针的引用。以下是对你提供代码片段的简化
c在C中,若:int *a=&b; // 假设b是一个整型变量int *p=a;
为什么以下两种声明方式的结果不同?const int *pp=p; // 不允许const int *const pp=p; // 允许
原因是:定义 const int *pp=p; 时,不允许对pp指向的内容进行修改,因此p不能是一个普通的指针。而 const int *const pp=p; 允许,因为它声明pp是一个指向const整型的const指针,这样p指向的内容可以被修改,但pp的指向不能改变。
给定的 const int *pp=p;,p 必须首先被隐式转换为 const int *,这意味着p指向的内容也被视为const,这是不允许的。但是,转换后的 const int * 是临时的,所以实际上是一个有效的临时指针,因此被允许使用。
在C中,如果:int a = 3; int* p = &a;
那为什么呢
const int* &pp = p;
不允许,但是
const int* const &pp = p;
被允许?
给定const int *& pp = p;,p必须首先隐式转换为const int *.但是转换后的const int *是一个临时的,它不能绑定到非const的lvalue-reference(比如const int *&).临时可以绑定到对const的lvalue-reference(比如const int * const&)(和rvalue-reference),所以const int * const& pp = p;工作良好.临时的生命周期延长到参考pp的生命周期.

