C++学习日记1(`*`的理解、const关键词)
C学习日记1*的理解、const关键词一、指针​ 之前我总是不能理解为什么在定义指针变量时是int* a而当给这个指针变量指向的地址赋值时却是*a b明明都是*在定义时却表示指针但赋值时却又表示指针指向的值但是之前我一直没有深究知道今天我在学习const与指针结合的场景下我在定义两个指针变量时所需要写的是int *a, *b这样才能表示我的a、b为两个指针变量而int* a, b这种情况只会表明你定义了一个int型指针变量a与一个int型变量b。于是我就又查了一下关于这个*的理解并得到了以下内容。​ 在语义上我总习惯将int*绑定为了一个整体表示指向整数的指针类型。但在C/C语言的语法里写int *a时他的逻辑并不是我定义了一个int*型的变量a而是我定义了一个表达式*a这个表达式计算后的结果是int由此就可以突然感悟出其实不管是在赋值表达式还是在定义表达式里*的作用都是用来表示某个指针指向的值的一个运算符。二、const关键词​ 我学习这部分的灵感主要是我今天遇到的一个问题const * int p a int * const p a;​ 说一下这两者之间的区别​ 我当时以为这是我一看便会的因为之前这还是我特意去查过的但是我一想忽然发现我全都忘记了。。。于是我就在自己的编译器里尝试了一下得到了以下结果#include iostream int main() { int a 5, b 10; const int *c1 a; // *c1 b; // 报错表达式必须是可修改的左值这个const修饰的是*c1这个int型数据所以对于该指针变量所指地址的值是不能更改的 std::cout *c1 ; c1 b; std::cout *c1 std::endl; int *const c2 a; *c2 b; std::cout *c1 ; // c2 b; // 报错表达式必须是可修改的左值这个const修饰的是c2这个数据所以对于该指针变量所指的地址是无法更改的 std::cout *c1 std::endl; const int * const c3 a; // *c3 b; // 报错表达式必须是可修改的左值第一个const修饰的是*c3这个数据所以对于该指针变量所指的地址的值是不能更改的 std::cout *c1 ; // c3 b; //报错表达式必须是可修改的左值第二个const修饰的是c3这个数据所以对于该指针变量所指的地址是无法更改的 std::cout *c1 std::endl; }​ 因为最开始的我是并没有理解到*这个运算符真正的含义到时我始终对于这一块的理解疑似有些误区但了解了运算符*后发现const其实就是用来修饰后面的这个表达式整体只要没有直接对这个整体进行赋值或者修改等操作就是可以的。

相关新闻

最新新闻

日新闻

周新闻

月新闻