C++指针学习笔记

int* p 定义一个int类型的指针(此处的额int 是作为一个类型符号存在)
\
p 指向了内存的一块,我们可以可以直接使用*p来操作其所指向内存的内容

那么实际上p只是指向了内存的某一个地址,打印出p的值的时候,会发现这就是一个普通的整数型的值

看下面的代码:

#include
using namespace std;
int main() {
int a = 888;
int p = &a;
cout<<p << endl; 打印p所指向的地址
cout<<
p; // 打印p所指向地址的值
return 0;
}

在C/C++中,数组的名字就是数组的内存的地址,他表示的是数组中的第一个元素在内存中位置,同时数组名本身就是一个指针类型。

在C/C++中数组是没有长度信息的,总是表示一个内存地址,所以我们在使用数组的时候需要一个额外的参数表示数组长度的信息。

使用指针来传参的优势

  1. 可以返回多个值(通过指针来完成多个输出参数)

  2. 效率上优势
    使用普通方式来传递参数的时候,实行的是按值传递,及对传入方法的参数先进行一个拷贝,然后把拷贝的值传入,这个时候实际上是在内存区域内再次申请了一块内存来存储这个值,然后在进行拷贝,如果这个参数值在占用内存比较大的情况下,会造成效率和内存空间的浪费,这个时候如果采用指针来传递参数,那么将会避免申请内存(可以直接读原来参数的内存) 和进行拷贝,有助于提升参数的效率。

使用const关键字
const关键字用来表示修饰的变量时不可以更改的,
const int a = 8;
这个时候,我们就无法在来更改a的值。

const 修饰指针的时候,表示指针所指向的内存区域是不可以修改的。

int a = 8;
int b = 9;
const int p = &a; p = 9; // 报错,不能修改指针所指向的内存
p = &b; // 不能修改指针所指向的内存,但是可以修改指针的指向。
cout << *p; // 输出 9。
a = 10; // 可以正常赋值
cout << a; //