C++学习--指针
通过指针(地址)间接访问内存
空指针:
指针变量指向内存中编号为0的空间–用于初始化指针变量(NULL),内存不可访问(0~255的内存编号系统占用)
int main() {
int* p = NULL;
//只要*p就报错
cout << *p << endl;//报错
return 0;
}
野指针(在程序中尽量避免野指针)
指针变量指向非法的内存空间。
//指针访问内存地址编号为0x1100的空间
int* p = (int*)0x1100;
//访问野指针报错
cout << *p<< endl;
const修饰指针(const在那个前面就那个不能改)
1.const修饰指针 --常量指针 const int *p = &a;
(const 在int前面,int值不能改)
特点:指针的指向可以改,但是指针指向的值不能改。
2.const修饰常量–指针常量 int * const p = &a;
(const在指针p前面)
特点:指针的指向不可以改,但是指针指向的值能改。
2.const修饰常量,也修饰指针 const int * const p = &a;
特点:指针的指向不可以改,但是指针指向的值也不能改。
指针和数组
利用指针访问数组中的元素:(数组名就是数组的首地址)
#include <iostream>
using namespace std;
int main() {
//数组的定义方式:
/*
* 1.数据类型 数组名[数组长度]
* 2.数据类型 数组名[数组长度] = {。。。。。}
* 3.数据类型 数组名[ ] = {。。。。。}
*
* 连续内存空间,都是相同数据类型
*/
//数组名: 内存首地址;sizeof(arr)整个数组的占用内存大小
//利用指针访问数组
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//数组首地址
cout << (int)arr << endl;//16进制强转成10进制
int* p = arr;
//数组长度
cout << sizeof(arr) / sizeof(arr[0]) << endl;
cout << "数组第一个元素" << *p << endl;
p++;//int4位,下一个地址
cout << "数组第2个元素" << *p << endl;
return 0;
}
指针与函数
值传递–形参改变不了实参;void swap(int p1,int p2){ }
引用传递;void swap(int &p1,int &p2){ }
地址传递。void swap(int *p1,int *p2){ }