指针变量的定义
可以通过指针访问内存,地址才可以访问内存,所以指针就是一个地址。
int main() {
//整形变量的定义
int a = 10;
//指针变量的定义
int * p;
//指针变量的赋值
p = &a;
//打印a的地址
cout << &a << endl;
cout << p << endl;
//指针的取值(解引用)
cout << *p << endl;
return 0;
}
指针所在的内存空间
指针的内存空间大小和机器字长(编译器)相关,32位占用4个字节,64位占用8个字节。
int main() {
//整形变量的定义
int a = 10;
//指针变量的定义
int * p;
//指针变量的赋值
p = &a;
cout << sizeof(p) << endl;
cout << sizeof(int *) << endl;
cout << sizeof(float *) << endl;
cout << sizeof(double *) << endl;
return 0;
}
可以通过不同的编译器编译后运行,查看32位编译器和64位编译器的指针大小是否有差异。
空指针和野指针
- 空指针
空指针是指向地址0的指针。
地址0~255是不能访问的,所以正常分配的地址空间,指针是不可能指向0~255的。
int main() {
//空指针
int * p = NULL;
//下面将会报空指针异常,空指针不能访问
*p = 100;
return 0;
}
- 野指针
野指针是指针指向了非法的内存空间。
一般野指针的出现是变量声明时没有默认初始化,或者堆内存删除后没有指向NULL(0)。
Warning : 所以指针变量定义的时候最好初始化,或者设置为 NULL。堆内存释放后,也要顺便设置为NULL。养成好习惯。
int main() {
//野指针,(将0x1111强制类型转化为地址)
int * p = (int *)0x1111;
//访问权限错误
cout << *p << endl;
return 0;
}
const 修饰指针
- 常量指针
指针指向的值不可改,指针指向可以修改。
int main() {
int a = 0;
int b = 0;
const int * p = &a;
//错误,指针指向的值不可改
//*p = 1;
//正确,指针指向可以修改
p = &b;
return 0;
}
记忆小技巧
const int * p
中文:const 是常量,int是类型, * 是指针, p是变量。
顺序是常量然后是指针,所以叫做常量指针。
const 在指针*前面,所以修饰的就是指针,所以*p的操作就会报错。
- 指针常量
指针指向的值可改,指针指向不可修改。
int main() {
int a = 0;
int b = 0;
const int * p = &a;
//正确,指针指向的值可改
*p = 1;
//错误,指针指向不可以修改
//p = &b;
return 0;
}
记忆小技巧
int * const p
中文:const 是常量,int是类型, * 是指针, p是变量。
顺序是指针然后是常量,所以叫做指针常量。
const 在变量p前面,所以变量就变为了常量,所以p=&b对常量进行修改就是错误的。
- 修饰指针和变量
const int * const p
这里就不讨论了,既不能修改指针操作,又不能修改变量指向。
指针操作数组
int main() {
int array[10] = {1,2,3,4,5,6,7,8,9,10};
int *p = array; //array就是数组的首地址
//打印第一个数组元素
cout << *p << endl;
//因为是int型(int 32位是4个字节),p++会在内存中后移4个字节
p++;
//打印第二个元素
cout << *p << endl;
return 0;
}
指针访问数组技巧
int main() {
int array[10] = {1,2,3,4,5,6,7,8,9,10};
//数组大小
int array_size = sizeof(array);
//数组元素大小
int element_size = sizeof(array[0]);
//数组长度
int length = array_size / element_size;
return 0;
}
通过sizeof(数组名)可以获取数组的总大小。
二维数组同样适用。
int main() {
int array[2] [3]= { {1,2,3}, {4,5,6} } ;
//数组大小
int array_size = sizeof(array);
//一维数组大小
int array_zero_size = sizeof(array[0]);
//元素大小
int element_size= sizeof(array[0][0]);
return 0;
}
注意 : 二维数组的数组名 array_pt++, 是移动一个一维数组大小的长度。
本文暂时没有评论,来添加一个吧(●'◡'●)