C语言笔记第十天

这篇博客探讨了C语言中二维数组作为函数参数的传递方式,包括数组指针和普通数组参数的区别。同时,讲解了指针作为返回值的潜在问题,强调不应返回局部变量的指针。最后,介绍了函数指针的使用方法,通过实例展示了如何调用和解引用函数指针。
摘要由CSDN通过智能技术生成

其实我原计划是七天搞定的,真没想到十天也没搞定.

二维数组做参数

#include <stdio.h>

void twoArrayAsArgument(int arr[3][4], int row, int col);

//二维数组传递时数组指针
void twoArrayAsArgument2(int (*arr)[4], int row, int col);

int main(int argc, char* argv[])
{
	//二维数组做函数参数
	int arr[3][4] = { {1,2,3,4},{5,6,7,8},{9,10,11,12} };
	
	//二维数组 行数 列数
	int row = sizeof(arr) / sizeof(arr[0]);
	int col = sizeof(arr[0]) / sizeof(arr[0][0]);

	twoArrayAsArgument(arr, row, col);

	twoArrayAsArgument2(arr, row, col);

	return 0;
}

void twoArrayAsArgument(int arr[3][4], int row, int col)
{
	printf("%d\n", sizeof(arr));	//4
}

void twoArrayAsArgument2(int(*arr)[4], int row, int col)
{
	printf("%d\n", sizeof(arr));	//4

	//遍历
	for (int i = 0; i < row; ++i)
	{
		for (int j = 0; j < col; ++j)
		{
			printf("%d ", arr[i][j]);
		}
	}
	printf("\n");
}

指针作为返回值

#include <stdio.h>

int* pointerAsReturn(int* p);

//刚才说到数组指针 突然想起来 char** argv 这个指针数组作为参数的优化(char* argv[])
int main(int argc, char** argv)
{
	int* p = NULL;

	p = pointerAsReturn(p);

	printf("hello world\n");

	//其实这时是能接受到值的 但是(这是IDE为我们做的好事也好坏事也好) 总之这个值是不可靠的垃圾值 
	//在上面打印输出语句就不会接受到值,如果打印一个还可以接收到,那么就两个
	printf("%d\n", *p);

	return 0;
}

int* pointerAsReturn(int* p)
{
	int num = 10;
	p = &num;

	return p;
}

//总结就一句话,不要返回局部的指针变量,如果有需要可以返回局部静态指针变量

函数指针

#include <stdio.h>

int add(int num, int num2);

int main(int argc, char** argv)
{
	//其实数组指针是
	int arr[3][5] = { 0 };
	int(*p_arr)[5] = arr;
	
	//函数指针也就是
	int (*p_add)(int num, int num2) = add;

	//调用
	p_add(1, 2);
	//也可以
	(*p_add)(1, 2);
	//还可以
	(***********************p_add)(1, 2);
	//其实对任何函数解引用都是无意义的操作

	return 0;
}

int add(int num, int num2)
{
	printf("hello world\n");

	return num + num2;
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值