C语言中最难分辨的概念--”数组与指针“

本文详细解析了C语言中的指针与数组概念,包括指针数组、数组指针、函数指针、函数指针数组及指向函数指针数组的指针等内容,并通过实例帮助理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“数组与指针”辨析:

在c语言中最容易被程序员所搞混的就是数组与指针的概念,简单点的一级指针、一维数组还是比较好理解与记忆的,但较复杂的指针数组、数组指针、函数指针、函数指针数组、指向函数指针数组的指针等就相对而言比较难以被程序员所理解与记忆了!那么,小主今天就为大家详细的说道说道喽:》

指针数组:
指针数组是指:每一个元素都是一个指针变量的数组。
例如:
char *arr[20];//arr代表一个含有20个char *类型元素的数组。

数组指针:
数组指针是指:一个指向数组的指针变量。
例如:
int arr[20];//一个含有20个整形元素的数组arr.

int (*p)[20] = &arr;//因为()的优先级高于[],所以p先于*结合,代表p是一个指针
//它指向“int [20]”类型,int [20]为一个数组类型同arr,所以将p初始化为arr的地址
//也就是整个数组的地址。

函数指针:
函数指针是指:一个指向函数的指针。
例如:
void test(char *);//一个包含char *类型形参并且返回void的test函数。

void (*p)(char *) = &test;//p先于*结合表明p是一个指针,p所指向的类型void (char *)
//同teat函数

函数指针数组:
函数指针数组是指:每个元素都为同一类型函数指针的数组。
例如:
void test(char *);//一个包含char *类型形参并且返回void的test函数。

void (*arr[20])(char *) ;//arr先于[]结合,说明arr为一个数组,它的每个元素为
//void (*)(char *)类型的函数指针。

指向函数指针数组的指针:
指向函数指针数组的指针是指:一个指向数组的指针,这个数组每个元素的类型是一个函数指针。
例如:
void test(char *);//一个包含char *类型形参并且返回void的test函数。

void (*arr[20])(char *) ;//arr为一个数组,它的每个元素为void (*)(char *)
//类型的函数指针。
void (*(*p)[20])(char *);//p先于*结合说明p是个指针,它指向void (*[20])(char *)
//类型的数组。

总结:

  • 在汉字中判断时,是指针还是数组只需看最后面两个字是指针还是数组即可。
  • 在代码中判断时,首次需要判断变量名是先与*还是[]结合,若先于*结合便是指针,否则为数组。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值