c指针

一级指针

一般形式:类型名* point_name

*在定义指针变量时必须指定其类型名,类型名用来指定此指针变量可以指向的变量的类型。

int main()
{
	int a = 10;
	int *point=&a;
	printf("%d\n", *point);
	system("pause");
}

结果如下:                                                                                 

                          

图示:

二级指针

一般形式:类型名** point_name

*可以看出二级指针或者多级指针,即用另外一个指针变量来存放前一个指针变量(目标变量)的地址。

一维数组

一般形式:类型名 name[]

*类型名指的是存在name这个数组里面元素的类型,如 int  arr[10].

二维数组

一般形式:类型名 name[][],如  int arr[4][4],

图示:在内存中存储形式,不像我们以为的真的四行四列,而是在一行。

通过下面的题来进一步认识数组:

指针和数组的关系

下面代码很好的说明了这一个问题:

int main()
{
	int i;
	int arr[] = {1,2,3,4,5,6};
	int arr2[2][3] = {1,2,3,4,5,6};
	int* p = arr;
	int* q = arr2;
	for (i = 0; i < 6; i++)
	{
		printf("%d",*(p+i));
	}
	printf("\n");
	for (i = 0; i < 6; i++)
	{
		printf("%d",*(q+i));
	}
	printf("\n");
	system("pause");
}
同时也说明了二维数组在内存中也是一行连续存储的。

指针数组:是数组还是指针呢?其实他是一个数组。其定义是这样的,一个数组,若其元素均为指针类型的数据,称为指针数组。

一般形式:类型名*数组名[数组长度],如 int*p[4].由于[]的优先级比*高,所以p先和[]结合形成p[4],表示p数组有四个元素。在和前面*结合,*表示次数组是指针类型,每个元素都可 以指向一个整型的变量。对其赋值时应该每个元素分别赋值。

图示:

数组指针:同样,这里就不是数组了而是指针。

一般形式:类型面(*name)[]如:int(*p)[4]:表示(*p)有四个元素,每个元素为整形,就是说p指向一个包含4个元素的整型数组。

图示:

说明此时p指向一个包含四个元素的一维数组,p不能指向一维数组的某个元素,p的值就是一维数组起始的地址。

函数指针:如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配了一段空间,这段存储空间的起始地址(又称入口地址)称为函数的指针。可以第一一个指向函数的的指针变量,用来存放这个函数的起始地址,即这个指针指向该函数。

原型:类型名(*指针变量名)(函数参数列表),在赋值时只需将函数名给出就行了,不需要给参数。

代码如下:

int Max(int x, int y)
{
	return x > y ? x : y;
}
int main()
{
	int a = 10;
	int b = 20;
	int(*p)(int, int) = Max;
	int max1 = Max(a, b);
	int max2 = p(a,b);
	printf("the max1 is :<%d\n", max1);
	printf("the max2 is :<%d\n", max2);
	system("pause");
}
结果如下:
由此可以看出,此时的p和Max是一样,都可以进行计算。也就是指向了这个函数,把Max的入口地址赋值给了p。

函数指针的一个重要的用途:那函数的地址作为参数传递给其他函数。

图示:






                      

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值