C语言最简单的指针学习

指针就是地址

变量 1.ID性。变量自己本身存在一个地址,唯一的ID

        2.存储性。变量相当于一个容器,存储数字或者地址

变量访问通过变量名(数组遍历)或者是地址(地址偏移遍历数据)

指针变量 int *parr;

    1.是一个变量,一个特殊的变量,区别在于存放的不是数字,而是一个地址,因此表明自己的特殊地位,在变量定义的时候加一个标识符*

 2.最好是 int *parr 原因:在OS中一个地址是4个字节,虽然char *parr也可以同等条件存储一个地址,但是当进行对指针进行解引用操作时会存在差异。类型不同,访问的权限大小也不同。如一个地址;ox1234 (前16位0后16位以4个为一组,分别是1234)                                  在进行解引用操作时,int型可  全部访问,而char型只能访问的34(只能访问到一个字节八位)  导致地址部分缺失。

 

指针的好处:

1.在函数形参中的体现

传递数值,在函数1中交换两个数剧,

1.函数使用完毕后该内存自动释放                      

2.与main函数中未在同一块内存区域,即对数值形参进行的操作,无效,没有能力修改main函数所对应的内存

传递地址,在函数1中交换两个数据

看似是在函数1中进行操作,实际上他的权利很大,通过函数1中地址变量里的0x12(地址),直接在main函数中找到对应数据的内存区域,操作成功,可以修改数据内存。

 

2.指定到特定的区域C51中寄存器等

3.指针偏移+取内容 效率较高

 

 

 

 

指针的初始化

数组名  等价与 数组首元素的地址

访问数组数据 1.下标法遍历                                                            2.指针偏移,取内容遍历

访问数组的时候:当在同一个函数中多次用指针访问同一个数组时,为了防止指针(地址跑到其他的地方)越界,需要在每次访问时将指针(地址)放到首元素即parr = arr;

地址(指针)与数组名可互换的地方如下:       1.parr[1]     arr[1]     下标法 数组中第二个元素

2.parr………第一个元素的地址

   parr+1     &arr[1]       第一个元素的地址

  *( parr+i)     arr[i]       第i个元素

地址(指针)与数字名不互换的时候: 

   指针常量………arr相当于&arr[0] 首元素的地址,是个常量     。编译不通过                                 常量指针………是个变量,通过偏移对应不同的地址

指针的自增自减

parr+数字 表示

1.地址+4/1(偏移几个字节由指针的类型决定)  

2.+1表示访问到第一个元素的地址

 

经典代码

void InitArr(int  *parr,int len);

      for(int i=0;i<len;i++){

         scanf("  %d  ",*parr++);

}

}

void PrintArr(int  *parr,int len)

{

  for(int i=0;i<len;i++){

printf("%d",*parr);

parr++;

}

 

 

}

 

 

推荐题目:函数的封装用指针来实现                                      1.void InitArr(int  *parr,int len);

                    2.void PrintArr(int  *parr,int len);

                    3.数组倒置(i<len/2;j+i=len-1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值