C语言 | 指针和数组

指针和一维数组

数组名是数组首元素地址(sizeof除外)

int main() {

	int ar[8] = { 12,34,56,78 };
	char* br[4];//定义了四个char类型指针
	int(*cr)[8]=&ar;//指向数组的指针   cr=&ar;  cr+1=cr+sizeof(ar)    *cr+1=ar+1=ar+sizeof(*ar);
	printf("%d,%d,%d", sizeof(ar), sizeof(br), sizeof(*cr));
	return 0;
}

ar代表首元素地址,&ar则代表首"数组"地址,

int(*cr)[8]=&ar;//因为&ar是个指针,*cr是首元素地址  也是指针,所以cr是二级指针捏
//类比
int a;
int* p=&a;
//把&ar给了cr   但是ar的类型是int[8]类型,要求类型统一,所以要int(*cr)[8]=&ar;

指针和二维数组

二维数组的理解

int ar[3] [4]可以看作3个int[4] ,int[4]中每个元素连续.每个int[4] (整体) 数组连续

和指针的结合
int main()
{
    int ar[3][4];
    
    //ar的意义 在一维中是首元素地址,二维的元素是数组,所以ar是首数组地址  *ar是首数组,sizeof(*ar)是一行的大小 所以ar++是到下一个int[4]即换行
    //&ar的意义 在一维中是数组地址,sizeo(ar)是整个二维数组大小,&ar++是跳到下一个二维数组(如果有的话)
    //ar[0]的意义 一维数组中是第一个元素 二维中是第一个数组,把ar[0]看作整体的话br的话 就是br[4],br是br[4]的首元素地址即ar[0]是第一行的首元素地址,首元素为基本整形int,ar[0]++即br++,跳到该行的下一个元素
    //&ar[0]的意义即&br 即第一个数组地址 &ar[0]++就是换到下一个连续数组
    //ar[1][4]的意义  1行4元素
    //&ar[1][4] 1行4元素的地址
    
    
    //ar+2是第二个数组地址 *(ar+2)即ar[2],是第二行首元素地址   *(*(ar+2)+1)即第二行第一个元素
    
    int ar[3][4];
    int(*br)[3][4] = &ar;
    int(*cr)[4] = &ar[0];//(*cr)=ar[0]
    return 0;
}

函数指针数组

int (a[5])(int, char);//这是一个函数指针数组,函数的输入参数为int和char类型,返回值为int型的指针

typedef int *(pFun)(int, char);//pFun是建的一个类型别名

pFun a[5];//使用定义的新类型来声明对象,等价于int* (a[5])(int, char);

void (*b[10]) (void ( * )());

typedef void ( *pFunParam)();//首先为上面表达式(void ( *)())部分声明一个新类型

typedef void (*pFun)(pFunParam);//整体声明一个新类型

pFun b[10];//使用定义的新类型来声明对象,等价于void ( b[10]) (void ()());

double(*(*pa)[9])();

typedef double(*pFun)();//首先为整体声明一个新类型

typedef pFun (*pFunParam)[9];//再为上面((*pa)[9])部分声明一个新类型

pFunParam pa;//使用定义的新类型来声明对象,等价于double(*(*pa)[9])();

函数指针数组

int*parr1[10]) ();

指向函数指针数组的指针

int (*arr[5])(int ,int)={NULL,Add,Sub,Mul,Div};
int (*(*p)[5])(int ,int)=&arr;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值