寻找数组的最大值/最小值&&获取数组特定位置指针

本文分享了作者在基础编程方面遇到的挑战,并总结了几个实用的编程技巧,包括寻找数组最大值/最小值的方法及数组指针的获取方式。深入探讨了一维数组形式存储动态矩阵的原因,涉及TLB和cache优化的知识。

昨晚出糗了,发现我虽然点了一部分并行计算、计算机底层、编程语言细节、程序调试方面的技能点,但是在基础编程方面其实很弱。这是本科期间刷题太少所落下的毛病,应该增强一下,特此长期收集总结一下一些非常常用的基本函数。

1.寻找数组的最大值/最小值

T findMax(T* arr, int N)
{
	//注意这里,昨晚就是因为顺手就写int,心急起来眼瞎才出糗的
	T max = arr[0];
	if (0 == N)
		return max;
	for (int i = 1; i < N; ++i)
	{
		if (arr[i] > max)
			max = arr[i];
	}
	return max;
}

2.获取数组中特定位置的指针

//1.直接采用指针加减法
T* p = arr + pos;

//2.采用下标访问 + 取址方法
//优先级问题不用担心,[]优先级高于&
T* p = &a[pos];

//3.获取矩阵特定行(一维数组形式)
T* mrow = matrix + r * N_col;
T* mrow = matrix[r * N_col]; 
//ps.为什么动态矩阵要用一维形式存储?用指针数组模拟二维矩阵不行吗?
//这涉及到TLB和cache,指针数组形式的矩阵,行与行之间内存分布不是连续的
//这会使每一行可能都分布在不同页中,整个矩阵会占据比一维形式多得多的内存页
//这样的矩阵对于TLB和cache都是相当不友好的
//有一个解决办法,先创建一个一维数组形式的矩阵,然后再用指针数组分别指向每行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值