指针:通过指针间接访问内存 可以通过指针来表示一个地址
int a=10
p=&a &为取地址符
*p=1000 *为解引用符
a=1000
指针所占的内存空间 在32位操作系统下,指针占4个字节大小;在64位操作系统下,指针占8个字节大小
空指针:指针变量指向内存中编号为0的空间
用途:初始化指针变量 空指针指向的内存是不可以访问的
int *p=NULL; 0~255之间的内存编号是系统占用内存,不允许用户访问
野指针:指针变量指向非法的内存空间
在程序中要避免!
const修饰指针:
1.常量指针
特点:指针的指向可以修改,但是指针指向的值不可以改
const int *p = &a; //const修饰的*,那么无法解引用,即无法修改指针指向的值
2.指针常量
特点:指针的指向不可以改,指针指向的值可以改
int * const p =&a;//const修饰的指针,那么无法更改指向
3.const即修饰指针,又修饰常量
特点:指针的指向和指针指向的值都不可以改
const int * const p =&a;
指针和数组的配合使用
int *p=arr;//arr就是数组首地址
指针和函数
地址传递 会改变实参
#include <iostream>
#include <iterator>
void swap(int *p1 ,int *p2){
int tmp=*p1;
*p1=*p2;
*p2=tmp;
}
int main() {
int a=10;
int b=20;
swap(&a, &b);
std::cout <<"a="<<a<<" "<<"b="<<b<<std::endl;
}
指针、数组、函数的搭配使用
//封装一个函数,利用冒泡排序,实现对一个整型数组进行升序排列
#include <iostream>
#include <iterator>
//冒泡排序 arg1数组的首地址 arg2 数组长度
void bubbleSort(int *array ,int length){
for (int i=0; i<length-1; i++) {
for (int j=0; j<length-i-1; j++) {
if (array[j]>array[j+1]) {
int tmp=array[j];
array[j]=array[j+1];
array[j+1]=tmp;
}
}
}
}
//打印数组
void printArray(int *arr,int len){
for (int i=0; i<len; i++) {
std::cout<<arr[i]<<std::endl;
}
}
int main() {
int arr[10]={4,3,6,9,1,2,10,8,7,5};
int len=sizeof(arr)/sizeof(arr[0]);
bubbleSort(arr,len);
printArray(arr,len);
}