C/C++中指针数组、数组指针、指针函数、函数指针的比较

char *p,这定义了一个指针,指针指向的数据类型是字符型,char  *(p)定义了一个指针P;


char *p[4], 为指针数组,由于[]的优先级高于*,所以p先和[]结合,p[]是一个数组,暂时把p[]看成是q,也就是char *(q),定义了一个指针q,只不过q是一个数组罢了,故定义了一个数组,数组里面的数据是char *的,所以数组里面的数据为指针类型。所以char *p[4]是四个指针,这四个指针组成了一个数组,称为指针数组,既有多个指针组成的数组。


char(*p)[4],为数组指针,强制改变优先级,*先与p结合,使p成为一个指针,这个指针指向了一个具有4个char型数据的数组。故p中存放了这个char型数组的首地址,可用数组指针动态内存申请:
char (*p)[10];

p=(char*)malloc(sizeof(char[x])*N);


char *f(char,char),为指针函数,()的优先级高于*,故f先与()结合,成为函数f(),函数的返回值是char *类型的,故返回值是一个指针。

char (*f)(char,char),为函数指针,*与f结合成为一个指针,这个指针指向函数的入口地址。函数名就是函数的首地址。函数指针是指向函数的指针变量。 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是一致的。函数指针有两个用途:调用函数和做函数的参数。
int func(int x); /* 声明一个函数 */
int (*f) (int x); /* 声明一个函数指针 */
f=func; /* 将func函数的首地址赋给指针f */
以后如果要调用函数func(),也就可以这样调用:(*f)();

二级指针简单来说就是指向指针的指针。
char a=200;
char *p;
char **q;//q是一个二级指针
p=&a;
q=&p;  //q指向指针p
假设变量a在内存中的地址为2000H,
指针p指向a,p的值是2000H,*p就是取地址2000H中的值即a为200,而p本身的地址是4000H,q指向指针p,*q就是取地址4000H中的值即p的值为2000H,而**q就是取地址2000H中的值即200。所以:
*p==200;
*q=2000H;
**q=200;
以上的q是一个指针指针的二级指针,然而还有指向数组的二级指针。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值