序言:红旗跃过汀江,直下龙岩上杭。收拾金瓯一片,分田分地真忙。《清平乐·蒋桂战争》
【看山是山】
也叫地址,就是内存块的首地址。
- 指针变量就是存放指针数据的变量。
- 所有指针变量都是4字节(32环境)8字节(64环境)
- 未赋初值的指针变量禁止使用(访问未初始化的指针的值程序直接崩溃。访问NULL指针的值也会奔溃)
【看山不是山】
Q1:二维数组的储存
在内存中,a 的分布是一维线性的,整个数组占用一块连续的内存。
Q2:在函数入参中,二维数组不能像一维数组那样直接传递给一个指针?
在C/C++中,一维数组和指针有一个特殊的关系:当你传递数组时,编译器不会复制整个数组,而是将它的首地址传递给函数。这使得函数可以通过指针访问数组的内容,而不必处理整个数组的复制。(一维数组在函数参数中自动衰变为指针)
二维数组不能像一维数组那样直接传递给一个指针(例如 int**),主要是因为二维数组的内存布局和C/C++中指针的类型规则不同
函数定义需要传入的是一个指向指针的指针。
调用时,传入的是一个二维数组(本质上是一个连续的内存块),不是一个真正的指针数组。
Q3:指针常量,常量指针、指向常量的常指针
(1) 指针常量:
int * const p =10;
const限制的是指针p的值,但是没有限定p指向的内存地址里的数据,所以内存的数据可以修改。
指针的指向不可以修改,指针指向的内存的值可以修改
即:10可以修改,但10存放的内存地址不能修改
(2) 常量指针:
const int *p=10;
常量指针,首先要是常量。就是指向的值要是一个常量,但是指向的内存地址不做限制
指针的指向可以修改,但是指针指向的值不可以修改。
即:10不可以修改,但10存放的内存地址能修改
(3) 指向常量的常指针:
const int const *p=10;
指针的指向不可以修改,指针指向的值也不可以修改。
即:10不可以修改,但10存放的内存地址也不能修改。
【看山还是山】
滴答~