• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C语言指针的一些用法

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


指针是C语言的灵魂,精华之所在。指针强大而危险,用得好是一大利器,用得不好是一大
潜在危害。正是指针具有强大而又危险的特性,加上指针比较难,很多人用的不好,所以越是封装
程度高的语言,越是没有指针的"存在"。比如JAVA,Python,就是把指针隐藏去了,不让用户接触,但很多功能
实质上还是用到指针的,只不过是封装好了,对用户隐藏。

如果指针学得好,在编程时可谓如虎添翼,用起招式也会游刃有余。

很多人觉得指针很难,其实不然,只要理解了指针的实质,多见,多练,也就是1+1=2的事。


指针的实质也很简单:在C语言中,指针是一种数据类型,用来存放各种类型的地址,通过地址可以找到该地址
单元的值,故称指针。简单而言,指针就是存放地址的。

 

指针强大的原因:程序要运行就必须加载到内存中去,因此程序的要运行的指令和所要
用到的数据都可以通过内存地址也就是指针获取到,有了指针你就可以掌控程序运行的流程和所用到的数据
然后可以为所欲为了,当然指针所能访问的一般而言都是合法的地址,至于如何访问不合法的地址,那就是另外的话题。

现在来看看指针的一些用法。
在C语言中,任何类型的指针的大小是4个字节,因为存放的都是地址。
1.
  int *p;//定义了一个整型指针,可以存放整型数据的地址
  int a=3;
  p=&a;(p就了存放a的地址,也就是说p指向了a,*p就等于3)

2.

  char*p="abcdef";//字符指针,p存放的是第一个字符(a)的地址,*p==a;

3.
  int a1[10];//整型数组,a1是一个数组,存放整型(int)数据
  int *p1=a1;//数组指针,p1是一个指针,存放整型数据的地址

  int *a2[10];//指针数组,a2是一个数组,存放的是整型指针(int*)数据

  int (*p2)[10];//数组指针,p2是一个指针,存放的是存放10个整型数据的数组的地址

4.
  void fun(int,int)
  {

  }

  void(*p1)(int,int);//函数指针,p1是一个指针,存放的是一个返回值为void,参数为两个int的函数的地址
  p1=fun;//函数名即为函数的地址.
  p1();

  常见用法:typedef void(*pointer)(int,int);//pointer为自定义的类型,这种类型表示可以定义返回值为void,参数为两个int型的函数的指针


  pointer p2;//p2是一个函数指针
  p2=fun;
  p2();

5.
  void(*a[10])(int);//指针函数,a是一个数组,因为'[' 的优先级比'*'大,a先和‘[’结合,存放的数据是返回值为void,参数为一个int的函数指针,

6.
  void(*(*p)[10])();//数组指针,p是一个指针,指向(存放10个返回值为void,没有参数的函数指针数据的)数组的地址

7.
  二级指针:表示指针存放的数据本身又是一个指针。

  char **p;//二级指针

  char*str[2]={"abc","defg"};//字符串数组

  p=str;//p是一个二级指针存放数组的地址,*p也是一个指针,存放的是第一个字符串的首字符的地址,**p就是字符'h'


8.

  指针可以进行加减运算

  int a[10];
  假设
  a[0]的地址:  1000(十进制)
  a[1]的地址:  1004//因为int在C语言中占4个字节
  a[2]的地址:  1008

  int*p=a;  //p存放的就是a[0]的地址1000,因为数组名就是数组第一个元素的地址

  p++;  //此时p不是加1变成1001,此时p应该为1004,指针的加减是按数据类型所占的字节数进行加减的
           //因为int占4个字节,所以p++为1004指向下一个元素。也就是a[1]


9.

  指针还有很多用法,有些起来很复杂,但是本质都一样,至于如何把指针的强大之处用起来,就要靠各位
  在写程序时按需发挥了。

  还是那句话,想熟悉一样东西,要多见,多练,多想。

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
STM32——C语言数据类型发布时间:2022-07-13
下一篇:
c#datatable增加列并赋值发布时间:2022-07-13
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap