const int * 和 int * const 傻傻分不清楚

const int * a和int const *a一样,定义时不是必须初始化,指针可以指向其他变量,但是指向的变量的值不能修改。

int * const定义时必须初始化,即必须指明指向哪个变量,定义后就不能再指向其他变量,但是指针指向的变量的值可以被修改。

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     //a和b是一样的,代表一个常整型数,必须手动初始化
 6     const int a = 0;
 7     int const b = 1;
 8     int ca = 3;
 9     int cb = 4;
10     //c是一个指向常整数型的指针,可以不初始化
11      int const *c ;//同const int *c;
12     c = &ca;
13     cout << *c << endl;//3
14     //指针本身可以修改:可以再指向其他变量
15     c = &cb;
16     cout << *c << endl;//4
17     //指针所指向的内存数据不能被修改:指针指向的变量不能再被赋值
18     //*c = 5;//error
19
20     int *e = &ca;
21     cout << *e << endl;//3
22     e = &cb;//正常的指针和变量都不是const的话可以改变指针的指向
23     cout << *e << endl;//4
24     *e = 6;//正常的指针和变量都不是const的话可以改变指针所指向变量的值
25     cout << *e << endl;//6
26     //d是常指针,必须初始化:指明指针指向哪个变量
27     int  *  const d= &ca;
28     cout << *d << endl;//3
29     //指针变量本身不能修改,即不能再指向其他变量
30     //d = &cb;//error
31     *d = 7;
32     //可以改变指针所指向的变量的值
33     cout << *d << endl;//7
34
35     //f:一个指向常整型的常指针(指针和它所指向的内存空间,均不能被修改)
36     const int * const f = &cb;
37     cout << *f << endl;
38     //f = &ca;//error
39     //*f = 9;//error
40     system("pause");
41     return 0;
42 }

原文地址:https://www.cnblogs.com/knmxx/p/9763879.html

时间: 2024-10-15 07:58:12

const int * 和 int * const 傻傻分不清楚的相关文章

对于这个函数const int func(const int&amp; a) const声明中,三个const分别是什么意思?

第一个const 函数的返回值类型是const. 这个const修饰没什么意义,你可以想象一下: 既然是函数的 返回值,而且是值传递的形式,是否const有什么意义.如果指针(引用)传递,怎表示返回值的内容不可修改:一般用在赋值操作中,例: const A& operator =() { ... }第二个const修改函数的输入参数,这样可以提高效率.如:用实参b调用const int func(const int& b) const时,将跳过调用的过程(不复制函数),而直接运行它的内容.

const int* 和 int const*的区别?

Thinking in C++ 看到了第八章,讲的是指针. 这里提出这两个的区别是: 1.const int* 指向const的指针 对于这个的解释是:     const int* u;       //u是一个指针, 它指向一个const int.这里不需要初始化,因为u可以是指向任意标识符(也就是说它不是一个const),但是它的值是不能被改变的. 2.int const*这个是指向int 的const指针 对于这个的解释是:      int * const w = &d; 现在读成w是

int *p,cons int *p,int const *p,int * const p,const int * const p,int const * const p的区别

 加有const关键字的几种情况的辨析 const修饰的代码 含义(特点) 等价性 int *p = &num; 1.       可以读自己 2.       可以通过*p改自己 3.       可以通过p = &data来看别人 权限最大 cons int *p = &num; 1.const放在左边意味着指向的是常量,这个常量不可以修改, 2.p = &data; (地址可以修改) 3.*p = 30;(这个时候是错误的) 这两者等价(应用:查看别人的账户) i

关于int &amp;const t和 int const&amp; t

#include<iostream.h> #include<stdio.h> int main() { int i = 0; int const& j = i; int & const t = i; const int& m = i; i = 3; printf("j = %d m = %d  t = %d i = %d &j = %d &m = %d &t = %d",j,m,t,i,&j,&m,

C/C++中的const int*和int * const

代码: 1 #include <iostream> 2 3 using namespace std; 4 5 int main(){ 6 const int *p; 7 int a = 2; 8 p = &a; 9 a = 5; 10 11 cout<<p<<" "<<*p<<endl; 12 13 int b = 10; 14 p = &b; 15 16 cout<<p<<"

const int*和int* const

int sloth = 3; const int* ps = &sloth; int* const finger = &sloth; ps不能修改sloth的值,但可以指向另一个位置. finger可以修改sloth的值,但不能指向其它位置. finger和*ps都是const,而*finger和ps不是. ——————————<C++ primer plus>

int main (int argc, const char * argv[0]) 中参数的含义;指针数组和数组指针

恩,有的编译器初始化时候会产生这样的参数 argc是命令行总的参数个数,argv[]是argc个参数,其中第0个参数是程序的全名 1. 几种C++ 常见的参数种类 int main(void); int main(); int main(int argc, char **argv);   //等价于int main(int argc, char *argv[]),是否等价呢?是不是前一个可以表示任意长度的任意个数组,后一个只是定长的任意个数的数组?见下面 int main(int argc, c

const int *p,int *const p区别(转)

1)先从const int i说起.使用const修饰的i我们称之为符号常量.即,i不能在其他地方被重新赋值了.注意:const int i与int const i是等价的,相同的,即const与int的位置无所谓.2)const int *p看例子:int i1=30;int i2=40;const int *p=&i1;p=&i2;  //此处,p可以在任何时候重新赋值一个新的内存地址.i2=80;  //这里能用*p=80来代替吗?答案是不能printf("%d"

c语言检测文件是否存在int __cdecl access(const char *, int);

最近写代码,遇到很多地方需要判断文件是否存在的.网上的方法也是千奇百怪,“百家争鸣”. fopen方式打开的比较多见,也有其他各种方式判断文件是否存在的,由于其他方法与本文无关,所以不打算提及. 笔者近来使用winapi比较多,于是顺便搜索了msdn,找到了一个函数:PathFileExists BOOL PathFileExists( _In_ LPCTSTR pszPath ); 以下是笔者最初的方法,windows api原则上提供的函数应该是最合理高效的,起码这个方法在windows平台

const int * pi/int * const pi的区别

前面有一篇文章:数组名就是常量指针 参考文章:http://blog.pfan.cn/whyhappy/5164.html const int * pi .int const * pi与int *  const  pi及其操作 1 从const int i 说起    你知道我们申明一个变量时像这样int i :这个i是可能在它处重新变赋值的.如下:int i=0;//…i=20;//这里重新赋值了    不过有一天我的程序可能需要这样一个变量(暂且称它变量),在申明时就赋一个初始值.之后我的程