本博文是学习黑马程序员C++视频时做的笔记,记录一下只是方便温故知新,不做其他用途。
1 指针定义和使用
#include <iostream>
using namespace std;
int main()
{
//1 定义指针: 数据类型 * 指针变量名;
int a = 10;
int * p;
p = &a;
cout<<"a的地址为:"<<&a<<endl;
cout<<"p为:"<<p<<endl;
//2 使用指针:指针前面加*,实现解引用,找到指针指向的内存
*p = 1000;
cout<<"a="<<a<<endl;
cout<<"*p="<<*p<<endl;
return 0;
}
2 指针的内存
#include <iostream>
using namespace std;
int main()
{
//1 定义指针: 数据类型 * 指针变量名;
int a = 10;
int * p = &a;
cout<<"sizzeof(int *):"<<sizeof(int *)<<endl;
cout<<"sizzeof(float *):"<<sizeof(float *)<<endl;
cout<<"sizzeof(double *):"<<sizeof(double *)<<endl;
cout<<"sizzeof(char *):"<<sizeof(char *)<<endl;
return 0;
}
64位系统输出为8
3 空指针和野指针
3.1 空指针
#include <iostream>
using namespace std;
int main()
{
/* 空指针:指针变量指向内存中编号为0的空间。*/
// 1 用途:初始化指针变量
// 2 注意:空指针的内存是不可访问的:0-255是系统占用的
int * p = NULL;
*p = 100;
return 0;
}
3.2 野指针
#include <iostream>
using namespace std;
int main()
{
/* 野指针:指针变量指向非法的内存空间*/
int * p = (int *)0x1100;
cout<<*p<<endl;
return 0;
}
4 const 修饰指针和常量
#include <iostream>
using namespace std;
int main()
{
/*1 const修饰指针 常量指针*/
int a = 10;
int b = 10;
const int *p =&a;
cout<<*p<<endl;//10
// 指针指向的值不可以改,指针的指向可以改
// *p = 20;错误
p = &b;//正确
cout<<p<<endl;//0x61fe10
/*2 const修饰常量 指针常量*/
// 指针指向不可以改,指针指向的值可以改
int * const p2 = &a;
*p2 = 100;//正确
// p2 = &b;//错误
/*3 const既修饰 又修饰常量*/
const int * const p3 = &a;
// *p3 = 100;//错误
// p3 = &b;//错误
return 0;
}
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;//第一个元素1
int *p = arr;//arr就是数组的首地址
cout<<arr<<endl;//0x61fde0
cout<<"利用指针访问第一个元素"<<*p<<endl;//利用指针访问第一个元素1
//不同数据类型占据内存字节大小:char1 short2 int4 float4 long4/8 double8
p++;//偏移了4个字节 因为创建的整型变量 走到下一个位置 需要4个字节
cout<<p<<endl;//0x61fde4
cout<<"利用指针访问第2个元素"<<*p<<endl;//利用指针访问第2个元素2
// 利用指针遍历数组
int *p2 = arr;
for (int i=0;i<10;i++)
{
cout<<*p2<<endl;
p2++;
}
return 0;
}
6 指针和函数
#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;
return 0;
}
7 指针、数组、函数的综合案例
#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++)
{
if (arr[j]>arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
void PrintArr(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、打印排序后的数组
PrintArr(arr,len);
return 0;
}