指针的基本概念
指针的定义
指针的概念:指针是C/C++语言中广泛使用的一种数据类型。运用指针编程是C/C++语言最主要的风格之一。
指针是存储内存地址的变量,指向一个数据结构的首地址。
C++编译系统在编译时会为不同数据类型的对象分配大小不同的存储空间。
在计算机中内存被分成若干个存储单元。每个存储单元都有一个固定的编号即地址。根据一个存储单元的编号即可准确地找到并访问这些存储单元。
指针变量中可以存储数据结构的地址,例如变量,数组或函数。
此时,指针变量中存储数组的首地址。
由于数组、函数都是连续存储,可以用指针变量来表示数组或函数。
指针的定义
指针变量的定义
使用指针变量前必须先声明
存储指针的变量称为指针变量。符号*表示此变量是指针变量。
int *ip1,ip2; //声明了1个指针变量ip1和1个普通变量ip2
int *ip3,*ip4; //声明了指针变量ip3,ip4都是整型指针
一次定义多个指针变量,每个指针变量前必须加“*”,否则,只有前面加“*”的才能被解释成指针
如果不确定指针变量的数据类型,可以使用void类型
void *p1,*p2;
指针的赋值
地址运算符&可以用来取变量的地址。
给指针变量赋值时需要注意:
- 未经赋值的指针变量不能使用
- 指针变量的赋值只能赋予地址, 决不能赋予任何其它数据
在代码栏输入以下代码,编译查看输出结果,注意查看两个内存地址是否一样:
#include <iostream>
using namespace std;
void main()
{
int a = 10;
int *p = &a;
cout<<&a<<endl;
cout<<p<<endl;
system(“pause”);
}
指针变量的赋值运算有6种形式
- 指针变量初始化赋值
- 把一个变量的地址赋予指向相同数据类型的指针变量。
- 把一个指针变量的值赋予指向相同类型变量的另一个指针变量。
- 把数组的首地址赋予指向数组的指针变量。
- 把字符串的首地址赋予指向字符类型的指针变量。
- 把函数的入口地址赋予指向函数的指针变量。
int a,*pa;
pa=&a; /*把整型变量a的地址赋予整型指针变量pa*/
int a,*pa=&a,*pb;
pb=pa; /*把a的地址赋予指针变量pb*/
int a[5],*pa;
pa=a; /*数组名表示数组的首地址*/
pa=&a[0]; /*数组第一个元素的地址赋予pa*/
int a[5],*pa=a;
char *pc;
pc="c language"; /*把字符串的首地址赋予指针变量*/
char *pc="C Language";
int (*pf)();
pf=f; //f为函数名
指针的使用
指针变量的使用
指针变量只能进行赋值运算、部分算术运算以及关系运算。
指针运算符
取地址运算符(&):单目运算符,其结合性为自右至左,其功能是取变量的地址。
间接引用运算符(*):只有一个操作数,其结合性为自右至左,用来表示指针变量所指的变量,也称解引用操作符。
在代码栏输入以下代码,编译查看输出结果,int *p=&a中,“*”是类型说明符,&a表达式的值是指针类型的,它是变量a的地址。在printf语句中,*p是一个表达式,它的值是指针p所指向的变量a的值。
#include <iostream>
using namespace std;
int main()
{
int a=5,*p=&a;
cout<<*p<<endl;
return 0;
}