指针(02)

9 篇文章 0 订阅

#声明:
1、数组里面只有一个地址和长度
2、数组名不是数组首元素的地址,而数组名里面保存的地址是首元素的地址

关系:    *的优先级低于[]   *的优先级低于()
数组操作: 1.数组的首地址   2.数组的大小

##区分:

#include<iostream>
using namespace std;
void main()
{
	int ar[10]={1,2,3,4,5,6,7,8,9,10};
	//三者的地址相同
	cout<<&ar[0]<<endl;
	cout<<&ar<<endl;
	cout<<ar<<endl;
}
	

这里写图片描述

#指针数组vs数组指针

指针数组:数组里面保存了指向了某种类型的地址
例如:int *p[10] ; 数组名为P的数组,保存了10个整形的地址
数组指针:指针指向了一个数组
例如:(int *)p[10]; 指针名为p的指针,指向了数组大小为10的数组

数组指针:

#include<iostream>
using namespace std;
void main()
{
	int ar[10]={1,2,3,4,5,6,7,8,9,10};
	//ar中存放的是数组首元素的地址,首元素是整型,使用int*
	int *ptr = ar;
	//&ar,ar中存放的是数组元素,因此使用(int*)[10]
	int (*pt)[10]=&ar;
}
	

指针数组

#include<iostream>
using namespace std;
void main(int argc,char *argv[])
{
	//char *str[]={"123","afff","ffdfd"};
	int a=12;
	int b=2;
	int c=21;
	int *str[3]={&a,&b,&c};
}

这里写图片描述

#指针函数vs函数指针

函数指针:指针指向了一个函数

#include<iostream>
using namespace std;
int Max(int a,int b)
{ return a>b?a:b;}
//函数指针
int( *pfun)(int ,int );
void main()
{
	//Max(10,20);
	pfun = &Max;
	//pfun = Max(10,20);
	(*pfun)(10,20);
}

> (*(void(*)())0)();//相当于一个函数指针
//*( void (*p)() ) (); // *( (void(*)()p) () ;,相当于把p乔治转换成函数指针类型

指针函数:函数的返回值为指针

char *str(char *Des,const char*Src)

#复杂指针的判断

右左法则:基于[],()的优先级高于*判断,先向右结合遇到括号就反向结合,遇到括号再向右结合(以此递推) ,总往右边看

int *(*(*fun)(int))[10];

这里写图片描述

一个指针名为fun,指向了一个函数,函数带了一个整型参数,返回值为指针类型,指针指向了一个数组空间大小为10,内容为int *.

解释:

int (*(*fun)(int *)) [5];//fun指针指向了一个函数,该函数带有一个整型指针,且返回值为指针,该指针指向了一个数组大小为5的空间,存放整型数
int (*(*fun(int *))[5];//一个fun函数的参数为整型指针类型且返回值为指针类型,该指针指向了一个数组大小为5的空间,存放整型数
int*(* fun(int*) )[5];//一个fun函数的参数为整型指针类型且返回值为指针类型,该指针指向了一个数组大小为5的空间,存放整型指针类型数

这里写图片描述

函数:
int func() :int 表示func函数的返回值;
int * func():int * 表示的是func函数的返回值  :指针函数
int (*p) func():表示一个指针指向一个函数 :例如服务端可以定义一个client指针来获取client相关的属性;
int ar1[]:定义一个数组,保存int类型的值;
char* ar2[]:数组中保存为char* 类型的数据,即指针数组;
int (*p) []; 一个指针指向一个数组;数组指针;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值