数据类型之指针

指针

指针是基本数据类型的一种

指针的实质

指针不像其他数据类型一样有确定的类型.
指针变量和指针常量有确定的类型.
指针存储的是一个字节内存的地址.
指针不是一个字节内存的地址
指针包括地址和类型.

地址


  • 0x0000ffff 就是内存中的一个地址

类型

  • int * 型
  • int * * 型
  • char * 型
  • double * 型
  • struct a * 型
  • int ( * )[4]型
  • int ( * )fun(void)型

指针常量

  • 将常量地址与具体的类型结合,就是一个指针常量
  • (int * )0x0000ffff
  • (int * * )0x0000ffff
  • (char * )0x0000ffff
  • (double * )0x0000ffff
  • (struct a * )0x0000ffff
  • (int ( * )[4] )0x0000ffff
  • (int ( * )fun(void) )0x0000ffff

指针变量

  • 将标识符与具体的类型结合,就是一个指针变量
  • int * p; //p是一个指针变量,p的类型为int * 型
  • int * * p; //p是一个指针变量,p的类型为int * * 型
  • char * p;//p是一个指针变量,p的类型为char * 型
  • double * p;//p是一个指针变量,p的类型double * 型
  • struct a * p;//p是一个指针变量,p的类型struct a * 型
  • int ( * p)[4];//p是一个指针变量,p的类型int ( * )[4] 型
  • int ( * p)fun(void);//p是一个指针变量,p的类型int ( * )fun(void) 型

指针的分析

当我们关注一个指针常量时,我们关注以下几点
  1. 指针常量的类型
  2. 指针常量指向的目标类型
  3. 指针常量指向的目标的地址
当我们关注一个指针变量时,我们关注以下几点
  1. 指针变量的类型
  2. 指针变量存储的地址
  3. 指针变量指向的数据类型
  4. 指针变量的地址
如果说对于每一个指针你都能将以上几点分析清楚,那么指针你就学会了

作者声明

指针是一种非常重要的数据类型,非常灵活,正是由于这点,指针还是比较难学的,刚学的同学都不知道从哪里下手.

其他

函数指针
先上实例,再作分析

#include <stdio.h>
void myfun(void);
int main(void)
{
    void (*pf)(void);
    pf = myfun;            /* 也可以这样赋值:pf = &myfun; 其道理同下*/
    (*pf)();
    pf();
    return 0;
}
void myfun(void)
{
    printf("hello world!\n");
}

第一种方法:(*pf)()
			因为pf指向myfun函数,*pf就是myfun函数,因此表达式(*pf)()myfun()一样。
            从myfun和pf的声明中就能看出myfun和(*pf)是等价的。
            
第二种方法:pf()
			因为函数名是一个指针,可以互换地使用指针和函数名,因此pf()myfun()一样。
            从pf的赋值语句中就能看出pf和myfun是等价的。

这是c发展过程的历史原因,代表两帮人的不同观点而已!

但,最关键的一点,c标准把这二者作为等价形式全部接受!!!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值