1、可以通过指针保存一个变量的地址。例如我们定义变量a=10,然后可以定义一个指针p保存变量a的地址。
2、*p:解引用,找到p指向的地址代表的数。
比如说:
cout<<p<<endl;//输出变量a的地址。
cout<<*p<<endl;//输出变量a中存放的数10。
3、语法:数据类型 * 指针名
int * p=&a;
4、求指针占用的内存空间(32系统中占用4个字节,64位系统中占8个字节)
cout<<"sizeof(int *)="<<sizeof(p)<<endl;//其中sizeof(p)也可以写成sizeof(int *)
这里的int * 是数据类型,sizeof即计算该数据类型所占用的字节数。
比如sizeof(int);sizeof(float);
5、空指针,野指针
即int * p=NULL或者int * p=0x1100;
6、const修饰指针
const int * p=&a;
指针指向可以修改,但是指针指向的值不可以修改,即,int a=10;
第一种:const int* p = &a;,不能改成*p=20
第二种:int * const p;//指针指向的值可以修改,但是指针的指向不可以修改
第三种:const int * const p;//指针指向和指针指向的值都不可以修改
7、指针和数组
定义一个数组 int arr[10];
指针访问:int * p=arr
其中,数组名arr即为数组中的第一个元素的地址,即首地址,不需要&;
cout<<"第一个数“<<*p<<endl; //第一个元素
p++;//地址++
cout<<"第二个数“<<*p<<endl; //第二个元素
8、for循环输出数组
for(int i=0;i<10;i++)
{
cout<<*p<<endl;
p++
}
9、指针和函数
函数回顾:
值传递中,形参改变不会影响实参,即如果函数中的形参num1和num2互换,不影响a,b。
地址传递:用指针实现地址传递时,形参会改变实参
#include<iostream>
using namespace std;
void swap(int* p1, int* p2)
{
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
int main()
{
int a = 10;
int b = 20;
swap(&a, &b);//地址传递,传给p1,p2地址,*p1,*p2是对地址解引用
cout << a << endl;//这里直接输出 a,b因为形参影响实参,原函数无返回值
cout << b << endl;
system("pause");
return 0;
}