C语言学习--关于指针

指针属于地址类型的变量,用以存放地址数据。

通常需要读出地址内存放的数据,需要访问空间:①通过访问空间名字 ; ②访问空间地址 ;

通常访问空间名字——给该空间一个名字,该名字属于指针变量,必然为地址类型,决定了所取的数据也是地址类型。通过“*”+“地址类型”访问该地址空间。

1.指针变量名

    int * p ;

    变量名为p,而非*p;原因是变量名属于标识符,标识符需要合法,因此不能有“*”.

    标识符的合法性:要求标识符只有由字母、数字、下划线组成

    只要是名称(非关键字),就是标识符,就要合法。


(1)不同类型的指针,不能互相赋值,如———

    int a = 10 ;

          int* pa = &a ;          //定义了pa指针,并指向a

          double* pb = pa ;  //!!!int*是指向int型变量,double*是指向double型变量,不能互相赋值


(2)“*”(星号)的位置

 int* a ;     // int与*连着写

    int * a ;    // int与*之间隔着空格,*与a也隔着空格

         int *a ;     // *与变量名连着


(3)!!区分:指针定义语句中的“*”(星号)和  按地址访问的“*”(星号)

         int a = 10 ;

         int b = 11 ;


 int* p ;      // 定义了一个指针(p是指针变量,属于地址类型,前面加*号是通过“*”+“地址类型”访问地址对应的空间)

   p = &a ;    // p指向了a      (!!!区分:变量a有地址,被所定义的指针p指向了它,但此刻所定义的指针p本身就属于一个变量,它也要有存放本身的地址)

         printf("%d\n" , *p ) ;   // 取得p处内存的值

         p = &b ;    // p改变指向,指向了b

         printf("%d\n" , *p ) ;  // 再取一次p处的内存值


(4)“*”(星号)操作__int不支持星号操作

int addr = 0x1234 ;  // 定义普通int型变量

*addr = 0 ;                // 出现变异错误!!!只有指针才能支持星号操作!!!


2.指针变量的类型

    2.1 指针本质是变量,而且属于地址类型,声明格式:包含“类型”、“变量名”

    2.2 int——整形(不能访问空间)、int *——地址类型(允许访问空间)


3.指针对象(目标访问的空间)的类型

    空间操作原理:空间的读写操作,依赖空间的类型;要对空间进行操作,必须知道空间的类型

    指针主要目的就是访问对象空间;要访问空间,就必须知道空间的类型。因此在使用指针变量

    int * p ;  指针变量名是p,类型为int * ,表示变量p中空间存的int * 类型数据。假如p:(代表)存放0x01(int *);* p 则代表 * 0x01(int *),该表达说明这整个整体代表一块空间,空间大小为0x01——0x05范围,属于int型空间——说明通过int * 访问的对象空间类型是int型。


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

int * p ;

p——指针变量名:指针变量本身所占用的空间(通过变量名访问空间)

*p——p:存放着对象的地址——> *对象地址——>访问对象的空间(通过地址访问地址对应的空间)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值