指针的相关

数据类型:

基本数据类型

构造类型(数组类型)

指针类型

指针:1.所谓指针,其实就是地址,地址是内存单元的编号

(理解:指针(地址)---作为内存单元的编号,本身也是一种数据,但是这种数据含义比较特殊)

int a = 0x1000;

&a; //0x1000(取地址)

2.指针还是一种数据类型

专门用来,保存,地址(内存单元的编号),这种数据的,数据类型

指针--->内存单元的标号--->一块内存空间对应

指针变量的定义:

语法:基类型*指针变量名

           (1)(2)(3)

(1)基类型---表示地址编号所代表的那块空间中要存放的数据的类型

                         //表示的p中存放的 地址编号所代表的那块空间中要存放的数据的类型

(2)*        ---表示定义的变量,不是一般变量,而是指针类型的变量

                        指针类型变量,意味着这个变量将来是存储地址这种数据的

(3)指针变量名---标识符,命名规则与变量名命名规则一致。

int a;//表示定义了一个int类型的a,a是一个变量,一定对应有一块空间

int * p;//表示定义了一个指针类型的变量p

          //既然是变量,则p一定有自己的一块空间

          //这块空间是用来存放 地址这种特殊的数据的

          //p指向的数据类型是int类型  //p指向的类型是基类型(目标类型)

         //p变量,可以存放的是int类型的地址

        //指针是一种数据类型 ,p是int型的指针(地址)类型

例:

int a = 10;

int *p = &a; //从p的角度看,我们说p指向了a

float a = 10.1;

int *p = &a; //此时编译会报警,因为左右两边类型不一致,p是int*

                    //int*表示是一个存放int类型数据的空间的地址

                    //a是一个float类型的变量,&a表示获得了这块空间的地址,这个值的类型是float*

通过指针访问数据:

* //单目运算---运算数必须是地址值

   //作用:

   //*地址值=>访问到了地址值对应的那块空间

   //eg:

   //相当于酒店中知道了门牌号并且拿到了钥匙,可以进入房间

有了指针之后:

       通过a变量名方式访问,这种直接访问

       通过p指针方式访问,这种间接访问

int a = 10;

int *p = &a;

printf("a = %d\n",a);//直接访问

printf("*p = %d\n",*p);//间接访问

int *p = &a;//p的基类型是int(看的是这行开头的int的类型)

*p运算:

step1:首先,拿出p中的值,到内存中定位

step2:定位到之后,从定位处开始,偏移出sizeof(基类型)的一块空间

step3:   将这块空间当做一个基类型的(变量)来看

注意:所以*p整体相当于是一个基类型的变量a

为什么需要指针?有些时候,不使用指针,没有办法达到想要的效果!

指针的核心用途:(被调修改主调)

使用方法:

1.要修改谁,就把谁的地址传出去

2.一定要对其做*运算

指针的初始化:

int *p;//

野指针(没初始化)//指向不明确的指针

int *p = NULL;//NULL是编号为0的这个地址

总结:

1.指针

2.指针变量定义

基类型*变量名;

3.指针变量的引用

*指针变量名

*p//理解三步运算过程

4.指针的初始化

如果指针未初始化,此时指针变量中是个随机的地址,被叫做野指针

为了让指针变量有明确的值,

int a  = 10;

int *p  = &a;

int *p = NULL;

5.应用

被调修改主调

使用方法:

a.要修改谁,把谁的地址传过去

b.被调函数中,一定要有*运算

--------------------------------------------------------------

指针+数组

指针+函数

指针+指针

---------------------------------------------------------------

指针 操作 数组

int a[10] = {1,2,3,4,5,6,7,8,9,10};

数组名 ---代表值---首元素的地址(只要知道首元素的地址了后面的地址就都能推出来来)

&a[0]//a[0]的数据类型是int型

       //&a[0]的地址类型是int*型

int *p = &a[0];//定义一个指针变量来存放数组首元素的地址

int *p = a;//a<=>&a[0]       和上一行意思一样

               // 可以说p指向了数组a

printf("*p = %d\n",*p);

指针访问一维数组

*(p+i)<=> a[i]  //等价 数组下标访问 本质上 

指针的运算:

p+N      //指针+数字

             //含义:表示指向了第N个元素的位置

            //数值上看,sizeof(基类型)*N

总结:&a[0] 和 *a等价

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值