指针变量、局部变量、结构体变量、指针函数、函数指针定义

指针变量是特殊意义的整型数,指针变量不存放在一般的整型变量中,必须存放在专门的指针变量中。定义指针变量时必须带*,给指针变量赋值时不能带*,定义和初始化一起时除外。指针变量存储了数据的地址,通过指针变量能够获得该地址上的数据,格式为“*pointer”,“*pointer”不仅可以获得地址上的数据,也可以修改地址上的数据,这要看表达式的形式,例如:int a=15,b=99,c=222; int *p=&a; *p=b;(通过指针变量修改内存上的数据) c=*p;(通过指针变量获得内存上的数据),则a,b,c均是99。

例如:int a=15; int *p=&a;(初始化和定义在一起,等价于:int *p; p=&a;),然后通过printf输出*p的值。CPU读写数据必须知道数据在内存中的地址,普通变量和指针变量都是地址的助记符,程序被编译和链接后,a,p的地址分别为0x1000,0xF0A0。使用*p的话,要先通过地址0xF0A0获得指针变量p本身的值,这个值就是变量a的地址,然后再通过这个值(地址)取得变量a的数据,前后共用两次运算,而使用a的话,可以通过地址0x1000直接取得它的数据,只需要一步运算。

一个int类型的变量a,pa是指向它的指针,那么*&a代表的结果是a,&*pa代表的结果是pa。

int arr[5]={1,2,3,4,5};arr表示数组的首个元素的地址,而&arr表示一个包含了5个int类型元素的数组的数组首地址,a=*(arr+1); b=*((&arr+1)-1); 则a=2, b=5。

定义在函数内部的变量称为局部变量,它的作用域仅限于函数内部,离开函数后就无效。在所有函数外部定义的变量称为全局变量,它的作用域默认是整个程序,也就是所有的源文件,包括.c和.h文件。

使用关键字typedef可以为类型起一个新的别名,typedef 的用法一般为:typedef oldName newName; 例如:typedef int INTEGER; INTEGER a, b; a = 1; b = 2; 例如为结构体定义别名:

则STU即是"struct stu"的别名,可以利用STU直接定义结构体变量,例如:STU body1,body2;

typedef在表现上有时候类似于#define,但typedef是一种彻底的封装类型,声明之后不能再往里面增加别的东西。例如:#define INTERGE int unsigned INTERGE n; 这是没有问题的,但是typedef int INTERGE; unsigned INTERGE n; 这种写法就是错误的,不能再INTERGE前面添加unsigned。

定义一个结构体变量:struct STUDENT student1; 在定义一个结构体指针变量:struct STUDENT *p = NULL; 三种等价写法:结构体变量.成员名 = (*指针变量).成员名 = 指针变量->成员名。

指针变量的用法:

函数指针的用法:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值