了解指针(3)

1.字符指针变量

我们有一种指针类型为字符指针char*


内容相同的常量字符串存放一份就够了(C语言会把常量字符串存储到单独的一个内存区域,当几个指针指向同一个字符串的时候,他们实际会指向同一块内存)

数组名表示数组首元素的地址

str1和str2分别表示h的地址,str1和str2是两块不同的空间,所以h的地址不同

即str1和str2不相等

(比较的是存的地址是否相等)


2.数组指针变量

2.1

指针数组  ----是数组,存放的是指针(地址)

字符指针  ----char*--指向整型的指针----字符指针变量中存放字符变量的地址

char ch = 'w';

char * pc = &ch;

整型指针  ----int * --指向整型的指针----整型指针变量中存放整型变量的地址

int a = 10;

int * p = &a;

数组指针  ----指向数组的指针 ----数组指针变量中存放数组的地址(&数组名)

p旁边放一颗 * ,说明它是指针   (*p)

int  arr  [10]                                                      int (*p)[10]

数组名去掉就是数组类型 int [10]                     指针变量去掉就是指针类型  int (*)[10]

2.2  int *p1[10]和int (*p2)[10]

char * ch[5];

char * (*pc)[5] = &ch;


指针数组                                     数组指针

数组                                            指针

存放指针的数组                          是指向数组的指针

char * arr[6];                                int (*p)[10];

int * arr[5];                                   p就是数组指针,p指向的数组有10个元素,每个元素的类型是int

2.3数组指针变量初始化

int arr[10]={0};

&arr;//&数组名,得到的就是数组的地址

int (*p)[10]=&arr;

3.二维数组传参的本质

一维数组传参

数组名是数组首元素的地址,一维数组传参的时候,传递的是数组首元素的地址

函数的参数既可以写成数组的形式,也可以写成指针的形式

不管是一维数组还是二维数组,形参既可以写成数组也可以写成指针

4.函数指针变量

4.1函数也有地址-----函数指针变量是存放函数的地址的,通过地址能够调用函数

函数名就是函数的地址,也可以通过&函数名的方式获得函数的地址

函数名和&函数名是一样的,都是函数的地址,没有区别,但&数组名和数组名是不同的

4.2

4.3

4.4typedef关键字

typedef是用来类型重命名的,可以将复杂的类型简单化int

1.将unsigned int重命名为uint

typedef unsigned int uint;

2.将指针类型 int *  重命名为ptr_t           (新的类型名必须在 * 的右边)

typedef  void(*pfun_t)(int);

3.数组指针类型 int (*)[5] 重命名为parr_t

typedef int(*parr_t)[5];

4.函数指针类型void(*)(int) 重命名为 pf_t

typedef void(*pfun_t)(int)                                                                  

5.函数指针数组

把函数的地址放到一个数组中,那么这个数组就叫函数指针数组

​​​​​从函数指针的基础上去写,存放多种类型的函数的地址

int  (*parr1[3])();         parr1先和[ ]结合,说明parr1是数组,数组的内容是int (*)()类型的函数                                    指针(parr1)

int  *parr2[3]();

int  (*)() parr3[3];


函数指针数组的用途:转移表

计算器的实现

  • 18
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值