雷达所研0:C++的学习笔记
今天是研0进组的第五天,这几天在了解雷达基础知识和相关算法,目前学到了C/C++的灵魂--指针。特此记录一些学习心得和体会。
1.指针与数组
int arr[5]={1,2,3,4,5}; int* a = arr; //等价于int* a = &arr[0]; std::cout << *(a+1); //二者相同 std::cout << *(arr+1);// 二者相同arr本身不是指针变量(它没有自己的存储空间),但编译器在表达式中会把arr转换成int*类型。但
arr和p有一个关键区别:sizeof(arr)是整个数组的大小(5 * 4 = 20字节),而sizeof(p)是指针的大小(8 字节,64 位系统)。
数组名是常量指针,它指向数组首元素,但你不能修改它。
int arr[5] = {0,1,2,3,4}; int* p = arr; p++; //原本p指向arr[0],++后指向arr[1] std::cout << *p;// 此时输出1 arr++; //错误用法,切记arr是常量指针 std::cout << *arr;// 报错2.指针与const
int a{2},b{4}; const int* p1 = &a; //指针常量 int* const p2 = &b; //常量指针 p1 = &b; //可以改变指针的指向,此时p1指向a *p2 = 5; //报错! 不能改变指针指向的值 *p2 = 5; //可以改变指针指向的值,此时b==5 p2 = &a; //报错! 不能改变指针的指向对于常量指针和指针常量,可以理解为指针常量const int*p1=&a;这里*p1离const更接近,所以const限定的对象是 *p1,而&a不受const的约束,所以指针常量可以改变指针指向而不能改变指针指向的值,而对于常量指针 int* const p2 = &a;这里const限定的是p2=&a,但是不限定a的数值的大小。
