C语言—指针_成仙不问道

指针(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;

}

指针的声明:指针本质是变量,声明方式和普通变量的声明类似·  类型名* 变量名   (*与变量名之间的空格可有可无)。

指针的定义(赋值):可以把地址赋给指针。

查找地址运算符&:指针变量是存储变量的地址那么我们就需要想办法获得变量的地址,到这里可能会感到无从下手,这样我们就需要用到查找地址运算符。一元运算符&给出变量的地址:指针=&变量名。

解引用、解引用指针运算符*:在指针前面使用*运算符得到指针变量存储地址所存储的数据。

注意:不要解引用初始化的指针,因为这样你并不知道数据存储在哪里。

取址:指针变量也有自的地址。对指针而言,&运算符给出指针本身的地址

指针与整数相加减:可以使用+运算符把指针与整数相加,或整数与指针相加。整数会和指针所指向类型的大小(以字节为单位)相乘,最终把结果与初始地址相加。如果相加后的结果超出初始指针所指向的存储范围,结果是未定义的;同理指针也可以使用-运算符使指针减去一个整数指针必须是第一个运算对象。指针递增、递减:递增指向数组元素的指针可以让该指针移向数组的下一个元素;递减则相反。(详见数组篇)

指针求差:上面讲到指针可以加减整数以及递增、递减,然而指针与指针之间也可以求差。通常求差的是指向同一数组的不同元素地指针,通过计算得出两元素地距离,单位与数组类型相同。

指针比较:使用关系运算符可以比较两个指针的值。前提是两个指针都要指向相同类型的值

指针无处不在,它结合应用于普通变量、数组、函数等范围。

学习/共进

欢迎各路大佬指点_

学无止境

成仙不问道

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值