C语言指针进阶 函数指针的数组 指针数组 数组指针

#include <stdio.h>
#include<stdlib.h>
#include<assert.h>
/*int add(int x, int y);
void print(char*str);
int main() {
	//int (*p)(int, int) = add;
	//printf("%d", (*p)(2, 3));
	void (*p)(char*) = print;
	(*p)('dasdas');

	return 0;
}
int add(int x,int y) {
	return x + y;

}
void print(char*str)
{
	printf("%s", str);
}*/
void print(int(*p)[5], int x, int y);
int add(int x, int y);
void print1(const char* str);
int sub(int x, int y);
int main() {
	//指针数组
	/*/int arr1[] = {1, 3, 3};
	int arr2[] = { 1,2,3};
	int* a[] = { arr1,arr2 };
	int i = 0;
	for ( i = 0; i < 2; i++)
	{
		int j = 0;
		for ( j = 0; j < 3; j++)
		{
			printf("%d", *(a[i] + j));

		}


	}*/
	//数组指针 存放数组的地址
	int arr[10] = { 1,2,3,3,4,5,6,78,9,3 };
	int (*pa)[10] = &arr;
	int* arr1[10];
	int* (*p)[10] = &arr1;
	int i = 0;
	for ( i = 0; i <10; i++)
	{
		printf("%d", *(*pa+i));

	}
	int arr3[3][5] = { {1,2,3,4,5},{1,2,3,45,5},{0,1,2,3,4} };
	print(arr3, 3, 5);
	//函数指针:指向函数的指针
	int (*fun)(int, int) = add;
	printf("%d", (*fun)(2, 3));
	void (*fu)(const char*) = print1;
	(*fu)("s");
	//(*(void (*)())0)(): 把0强制类型转换成:void(*)()函数的指针类型  0就是一哥函数的地址
	//调用0地址处的该函数
	//<c陷阱和缺陷>
	//void (* signal(int,void(*)(int)))(int)
	//等于 typeof void(* pfun)(int)
	//pfun siganl(int,pfun)
	//siganl 是一个函数声明
	//siganl函数的参数有两个 一个是int 一个是函数指针 该函数指针的函数参数是int 返回类型是void
    //siganl函数的返回类型也是一个函数指针 该指针的参数是int返回类型是void
	int* brr[2];
	int (*paa[2])(int, int) = { add,sub };
	int i1 = 0;
	for ( i1 = 0; i1< 2; i1++)
	{
		printf("%d", paa[i1](1, 2));
		printf("\n");
	}
	
	return 0;
}
void print1(const char* str) {
	printf("%s", str);
}
int add(int x, int y)
{
	return x + y;

}
int sub(int x, int y)
{
	return x -y;

}
void print(int(*p)[5], int x, int y)
{
	int i = 0;
	for ( i = 0; i < x; i++)
	{
		int j = 0;
		for ( j = 0; j < y; j++)
		{
			printf("%d", *(*(p + i) + j));
			printf("%d", (*(p + i))[j]);
			printf("%d", p[i][j]);
			printf("%d", *(p[i] + j));
			
		}
		printf("\n");
		// int arr[5]: 一个5个元素的整形数组
		// int *arr[8]: 一个数组有8个元素,每个元素的类型是int* *arr是指针数组;
		// int (*p)[2]:一个指针指向了一个数组,数组有2个元素每个元素的类型的int (*p)是数组指针
	    // int (*p[2])[8] 该数组有2个元素,每个元素是一个数组指针改
	}
	

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值