指针(pointer)是C语言最重要的核心概念之一(也是C最为复杂的概念)。在此我将用我的方式讲述。
内存:通常内存由一系列连续编号或编址的内存单元组成。(每个存储单元都有一个地址)
存储单元可以单个进行操纵,也可以以连续成组的方式操作。
机器的一个字节存储单元可以存放一个char类型的数据,两个相邻的字节存储单元可以存储 一个short(短整型)类型的数据。
字节(byte)为最小的存储单元,字节由8位(bit)组成。
指针:指针是一种变量,存储地址的变量。
指针是能够存放一个地址的一组存储单元。
指针也是一个变量,有类型,也有大小,占据内存(通常是两个或4个字节)。
指针同普通变量类似也存在类型,指针指向本身的类型要与指向数据的数据类型相同。
#include<stdio.h>
int main(void)
{
int*p1;//声明指针p1
float*p2;//声明指针p2
double*p3;//声明指针p3
char*p4;
int i=1;
int num;
float f=1.00;
double 1.0000;
char c='a';
p1=&i;//定义指针,使用查找地址运算符将整型变量i的地址赋给p1(p1是int类型指针,i是int类型数据)
num=*p1;//解引用指针
p2=&f;//定义指针
P3=&d;
p4=&c;
return 0;
}
指针的声明:指针本质是变量,声明方式和普通变量的声明类似· 类型名* 变量名 (*与变量名之间的空格可有可无)。
指针的定义(赋值):可以把地址赋给指针。
查找地址运算符&:指针变量是存储变量的地址那么我们就需要想办法获得变量的地址,到这里可能会感到无从下手,这样我们就需要用到查找地址运算符。一元运算符&给出变量的地址:指针=&变量名。
解引用、解引用指针运算符*:在指针前面使用*运算符得到指针变量存储地址所存储的数据。
注意:不要解引用初始化的指针,因为这样你并不知道数据存储在哪里。
取址:指针变量也有自的地址和值。对指针而言,&运算符给出指针本身的地址。
指针与整数相加减:可以使用+运算符把指针与整数相加,或整数与指针相加。整数会和指针所指向类型的大小(以字节为单位)相乘,最终把结果与初始地址相加。如果相加后的结果超出初始指针所指向的存储范围,结果是未定义的;同理指针也可以使用-运算符使指针减去一个整数指针必须是第一个运算对象。指针递增、递减:递增指向数组元素的指针可以让该指针移向数组的下一个元素;递减则相反。(详见数组篇)
指针求差:上面讲到指针可以加减整数以及递增、递减,然而指针与指针之间也可以求差。通常求差的是指向同一数组的不同元素地指针,通过计算得出两元素地距离,单位与数组类型相同。
指针比较:使用关系运算符可以比较两个指针的值。前提是两个指针都要指向相同类型的值。
指针无处不在,它结合应用于普通变量、数组、函数等范围。
学习/共进
欢迎各路大佬指点_
学无止境
成仙不问道