1.指针的定义和使用
指针语法:
数据类型 指针*变量变量名
使用指针:
可以通过解引用的方式来找到指针指向的内存
指针前加*代表解引用 *p代表指针指向内存的数据,读写,修改,操作
#include<iostream>
using namespace std;
int main()
{
//1.定义指针
int a=10;
//指针语法:数据类型 指针*变量变量名
int* p;
//让指针记录变量a的地址
p=&a;
cout<<"a的地址"<<&a<<endl;
cout<<"p的地址"<<p<<endl;
//2.使用指针
//可以通过解引用的方式来找到指针指向的内存
//指针前加*代表解引用 *p代表指针指向内存的数据,读写,修改,操作
*p=1000;
cout<<"a="<<a<<endl;
cout<<"*p="<<*p<<endl;
system("pause");
return 0;
}
2.指针所占内存空间
32位操作系统,指针占4个字节
64位操作系统,指针占8个字节
#include<iostream>
using namespace std;
int main()
{
//指针所占内存空间
int a=10;
int *p;
p=&a;
//等价于int *p=&a;
//32位操作系统,指针占4个字节
//64位操作系统,指针占8个字节
cout<<"sizeof(int*)="<<sizeof(p)<<endl;
system("pause");
return 0;
}
3.空指针和野指针
空指针:
指向内存编号为0的空间;用途:初始化变量;空指针指向的内存不可访问
野指针:
指针变量指向非法空间
空指针:指向内存编号为0的空间;用途:初始化变量;空指针指向的内存不可访问
#include<iostream>
using namespace std;
int main()
{
//初始化变量
int *p=NULL;
//
system("pause");
return 0;
}
//野指针:指针变量指向非法空间
#include<iostream>
using namespace std;
int main()
{
//野指针
//程序中避免出现
int *p=(int*)0x1100;
system("pause");
return 0;
}
4.const修饰指针
const修饰指针--常量指针
指针指向可以改,指针指向的值不能改
const int*p=&a;
const修饰常量--指针常量
int* const p=&a;
指针指向不可以改,指针指向的值可以改
const修饰指针又修饰常量
const int* const p=&a;
指针指向和指向的值都不可以修改
5. 指针和数组
利用指针访问数组中的元素
#include<iostream>
using namespace std;
int main()
{
//利用指针访问数组中的元素
int arr[10]={1,2,3,4,5,6,7,8,9,10};
cout<<"第一个元素为:"<<arr[0]<<endl;
int* p=arr;//数组首地址
cout<<"指针访问第一个元素:"<<*p<<endl;
p++;//指针后移一位(4个字节)
cout<<"访问第二个:"<<*p<<endl;
int* p2=arr;
for(int i=0;i<10;i++)
{
cout<<"访问每个:"<<*p2<<endl;
p2++;//每次偏移
}
system("pause");
return 0;
}
6.指针和数组函数
如何把一个数组传到函数中:首地址,指针
传一个数组长度到函数体中
//封装一个函数,利用冒泡排序实现对整形数组的升序排序。
#include<iostream>
using namespace std;
//冒泡排序,参数一:数组首地址;参数二:数组长度
void bubbleSort(int*arr,int len)
{
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-i-1;j++)
{
//如果j>j+1,交换数字
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
//打印数组
void printArry(int*arr,int len)
{
for(int i=0;i<len;i++)
{
cout<<arr[i]<<endl;
}
}
int main()
{
//1.创建数组
int arr[10]={4,3,6,9,1,2,10,8,7,5};
int len=sizeof(arr)/sizeof(arr[0]);
//2.创建函数完成排序
bubbleSort(arr,len);
//3.输出 打印数组
printArry(arr,len);
system("pause");
return 0;
}
7.指针和函数
#include<iostream>
using namespace std;
//实现两个数字进行交换
void swap01(int *p1,int *p2)
{
int temp=*p1;
*p1=*p2;
*p2=temp;
}
int main()
{
//地址传递
int a=10;
int b=20;
swap01(&a,&b);
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
system("pause");
return 0;
}