C语言《指针》命名解析

        学到指针,笔者发现在C语言里面有很多名字会让人摸不着头脑,比如“指针数组”“数组指针”“指针函数”“函数指针”“函数指针数组”......这些名字会让人觉得头大。那么他们到底是怎么个事呢?接下来让我分别给大家解释一下。

1.指针数组

        指针数组的一般形式是:数组变量类型+数组名+[ ],比如 :

int* arr[10];

        在这里怎样理解它呢?首先,我们看到了一个变量名“arr”,由于“[ ]”的优先级是大于“*”的,所以“arr”先和“[ ]”结合,变成了一个数组,于是“*”就会和“int”结合。整体理解起来就是“定义了一个数组,里面有十个元素,每个元素的类型是‘int*’型”。那么这个数组的作用就是用来存放类型是“int*”型指针的。

2.数组指针

        数组指针的一般形式是:变量类型+ (*变量名)+[ ],比如:

int (*arr)[10];

        在这里,我们可以看到它和指针数组在格式上的区别是在“*”和变量名两边加上了“()”,在这里这个括号的作用是改变优先级,由于“()”和“[  ]”的优先级属于同一级,且结合方向是从左到右,那么“arr”就应该和“*”结合,代表这是一个指针变量,然后再理解“[10]”代表“arr”指向一个数组。整体理解起来就是“定义一个指针变量,它指向一个数组大小为10的数组,这个数组里面每个元素的类型都是‘int’型”。不过要注意的是这个指针储存的是整个数组的地址,那么指针+1或者-1,指针移动的大小是sizeof(数组元素类型)*数组元素的数量。

3指针函数

        指针函数的一般形式是:函数返回值类型+ * +函数名+()比如:

int *arr()
{
    //函数体
return &
}

        在这里,同样是“()”先和函数名“arr”结合,代表这是一个函数,“*”和“int”结合,代表返回值类型是“int*”即返回一个地址。在这里需要注意的是不要返回本函数里面变量的地址,因为函数在结束调用之后会将内存归还给系统,如果被接受返回值之后,那么他指向的是已销毁的地址,他就变成了“野指针”,这是很危险的。

4函数指针

        函数指针的一般类型是:函数返回值类型+(*变量名)+(函数参数类型)。比如:


int Add(int num1,int num2)
{
return num1+mun2;
}


int (*arr)(int,int)=Add;//或者int (*arr)(int,int)=&Add;

        同样的理解:“*”先和arr结合,说明arr是一个指针变量,它指向一个有两个“int”类型形参,并且返回值类型是“int”型的函数。因为函数名就是地址,所以在使用的时候,函数名使用“&”和不使用“&”的效果一样。

5函数指针数组

        函数指针数组一般形式是:函数指针指向的函数返回值类型+(*数组名[元素数量])(函数指针指向的函数形式参数类型),比如:

int (*arr[10])(int,int);

        这里arr先和“[ ]”结合,代表arr是一个数组,可以储存10个指向有两个“int”型的形式参数,且返回值类型是“int”型的函数的地址。使用方法同普通数组,它可以实现转移表的功能。

理解这些知识需要知道各个符号的优先级和结合性,更多的是动手操作,让知识牢记于心

                                                                                                                          如果有误,欢迎斧正

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值