首页 > 编程知识 正文

指针p1和p2分别指向两个无头结点(const static 区别)

时间:2023-05-03 08:23:13 阅读:67669 作者:1125

我最近遇到了有关指针和const的问题。 阅读《C++ Primer(5th)》和网友博客总结了几种方法。 总结如下。 如果有错误,就尽情地指出来。

常数指针和指针常数必须首先区分常数指针和指针常数。 其方法是,从右向左,遇到'int'这样的数据类型时,如' 3358www.Sina.com/'、'整型'

常数输入p; //整数常数const int *p; //指向整数常量的指针(从右向左阅读) int const *p; //指向常量整数的指针(同上) int *const p; //指向整数型const int *const p的常数指针//指向整数常数int const *const p的常数指针//常数指针指向常数整数型(同上),所以从读法上区分指针常数和常数指针变得非常简单。 他们的理解如下

const

常量借用《C++ Primer(5th)》的例子。

常数双精度pi=3.14; //pi是常数,不能改变双精度* ptr=pi//错误,ptr只指向普通指针const双精度* cptr=pi//cptr指向常数*cptr=42的“对象” 因为已经是常数了。 双精度Dval=3.14; //dval可以改变cptr=dval; 通过改变dval访问cptr 指向

# includeiostreamusingnamespacestd; int main () { /* int t=3; int r=t; int newt=4; r=新闻; cout newt 'n' r endl; //上述为4和4 /* int t=3,以及能够正常执行的const int r=t; int newt=4; r=新闻; cout newt 'n' r endl; //错误*/int i=3; 常数int * p=I; int newi=4; p=newi; cout newi endl; cout *p endl; //4和4返回0可正常运行;对于指针常量,被指向的对象是常量;对于常量指针,是指针本身是常量。需要初始化,初始化完成后无法修改。 在const之前,指针表示它是一个常量。 示例:

# includeiostreamusingnamespacestd; int main () inta=2; int c=3; 常数int * pi=a; cout pi 't' *pi endl; pi=c; cout pi 't' *pi endl; cout c 't' c endl; int * const ptr=a; cout ptr 't' *ptr endl; *ptr=c; cout ptr 't' *ptr endl; cout a 't' a endl; /*执行结果为0x6dfee 420 x6dfee 030 x6dfee 030 x6dfee 420 x6dfee 430 x6dfee 43 */return 0; }作为常数指针,可以看到ptr已牢牢固定在0x6dfee4的位置。 因为这个位置是“常数”。

最后总结:查看const和*的相对位置(从右向左阅读) ) ) ) ) ) ) ) ) )。

常数指针: type * const ptr

常数: const *type ptr

最高位const和最低位const最高位const :指针本身是常数;

基const :指针指向的对象是常量;

顶部指针可以表示指针常量(pointer to const)是常数。

int i=0; int *const p1=i; //p1不能改变,顶级const int ci=42; //ci不能改变,顶级const int *p2=ci; 可以变更//p2。 下层(变更方法参照上面的指针常数的例子(const int *const p3=p2 //右const为上层,左const为下层const int r=ci //用于声明的const都是下层i=ci //上层ci

int num_c=3; const int *p_c=num_c; //p_c是指向下级const的指针//int *p_d=p_c; //错误,将低位常数指针设置为非低位常数指针const int *p_d=p_c; //正确,下位const指针为下位const指针所以和常量引用一样,指向常量的指针没有规定所指向的对象必须是常量,它仅仅要求不能借助这个指针改变对象的值,而没有规定那个对象的值不能通过其他方法改变。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。