本篇的内容十分的杂,而且表述不清,纯属菜鸟叽叽,路过请转。
底层
指针的周边关系
第一、具有静态生存期的变量在程序运行前就已经被分配了内存空间。而普通变量是在什么时候分配内存空间的呢?答案是,程序运行的时候咯。
第二、清楚指针的价值。函数调用时,指针能有效的提高大量数据的传输效率。
第三、 内存单元的访问管理类似于学生公寓的情况。学生就相当于变量的内容,房间是存储单元,房号就是存储地址。房号变成地址了那么变量名是什么?答案是,学生的名字。
如果知道了学生的名字,就可以有名字找到学生。如果知道了房号,同样可以找到这个学生。前者相当于使用普通变量访问数据,后者相当于使用地址访问数据。
&运算符
与指针密切关联
“&”出现在变量声明语句中位于被声明的变量左边表示的是引用,例如:
int &i; //声明了一个int型的引用
“&”在给变量赋初值时出现在等号右边(或在执行语句中作为一元运算符
)出现时,表示取对象的地址,例如:
int a, b;
int *pa, *pb=&b;
pa=&a;
用指针处理数组元素:
1.不同类型的指针至简或者指针与非0整数至简的关系运算是毫无意义的。但是指针变量可以和整数0进行比较,0专用于表示空指针,也就是一个不指向任何有效地址的指针。
2.数组中下标为i的元素就是星号(数组名+i),例如,星号array就相当于array[0],*(array+3)就是数组元素array[3]。
3.以下写法等价:
void f(int p[]);
void f(int p[3]);
void f(int *p);
4.使用指针变量输出数组元素:
int main(){
int a[10] = {1,2,3,4,5,6};
for (int *p = a;p<(a+6);p++){
cout << *p << endl;
}
return 0;
}
指针数组:
什么叫指针数组,1每个数组的元素都是指针2
声明一维指针数组的语法形式为:
数据类型 * 数组名[下标表达式];
关于指针的其他不太重要的知识整理:
1.指针也是一种数据类型。所以,请不要歧视指针。
2.声明对象的类型,一声明了变量所需要的内存空间,二限定了对变量可以进行的运算及运算规则。莫名好奇怪,JavaScript中的弱类型var如何确定分配多少内存呢?