重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
比较2个int型数值各位数字和的大小
在大通等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站制作、成都网站设计 网站设计制作定制网站建设,公司网站建设,企业网站建设,高端网站设计,全网营销推广,成都外贸网站建设,大通网站建设费用合理。
函数名称:CompIntBitSum
函数功能:比较2个int型数值的各位数字的和的大小
函数参数:const void * 2个const类型的指针,指向int类型数据的指针
函数返回值:返回2个数值的各位数字和的大小
如果a的各位数字和 b的各位数字和, 返回正数;
如果相等,返回0;
如果小于,返回负数。
CompIntBitSum函数代码详解:
第一行
int ia = * (int*) a;
int ib = * (int*) b;
进行类型转换并获取int数据的数值
由于CompIntBitSum的函数参数的2个const void *的指针,无法直接获取该指针指向的int数据的
数值(这是因为void型指针可以指向很多类型数据,具有可移植性,所以经常使用void来
传递参数)。
如果传递的是指向int数据的void类型指针,那么需要获取该void指针指向的 int型数据的值,需要
先进行类型转换,将void *指针转换成 int *指针。
(int*) 是类型转换运算符,将操作数转换成指向int数据的指针,
(int*)a是将void*类型转换成 int*类型。
所以此时 (int*)a是一个int指针,指向int类型数据。
要获取该int指针所指向的值,需要使用指针访问说明符 * ,
即 * (int*)a,此时这就是这个 int数据的值。
int ia = *(int*)a;就是将void*类型的指向int数据的指针a指向的值赋值给ia。
同理
int ib = *(int*)b;就是将void*类型的指向int数据的指针b指向的值赋值给ib。
第二行
int suma = 0;
int sumb = 0;
声明2个int变量用于存储2个ia 和 ib的各位数字的和,并初始化为0。
2个while 循环
伪代码:
对 整数ia的每位的数字
使用 ia%10 获取个位数字,将其加到suma中;
使用 ia /= 10;使得ia的个位除去。
直到 ia = 0。
// 如果 ia 不是0
while(ia)
{
// 获取当前的ia的个位数字,并加到suma中。
suma += ia%10;
// 去除个位数字
ia /= 10;
}
int i,j,k;
int t;
for(i=0; in-1; i++){
t=g[i],k=i;
for(j=i+1; jn; j++)
if(g[j]t)
t=g[j],k=j;
g[k]=g[i];
g[i]=t;
}
1、数组是多个 相同类型 的数据的组合,一个数组一旦声明/定义了,其 长度是固定的,不能动态变化 。
2、var arr []int 这时arr就是一个slice 切片 。
3、数组中的元素可以是任何数据类型,包括值类型和引用类型,但是 不能混用 。
4、数组创建后,如果没有赋值,有默认值如下:
数值类型数组: 默认值为 0
字符串数组: 默认值为 ""
bool数组: 默认值为 false
5、使用数组的步骤:
(1)声明数组并开辟空间
(3)给数组各个元素赋值
(3)使用数组
6、数组的下标是从0开始的。
7、数组下标必须在指定范围内使用,否则报panic:数组越界,比如var arr [5]int的有效下标为0~4.
8、Go的数组属于 值类型 ,在默认情况下是 值传递 ,因此会进行值拷贝。 数组间不会相互影响。
9、如想在其他函数中去修改原来的数组,可以使用 引用传递 (指针方式)。
10、长度是数组类型的一部分,在传递函数参数时,需要考虑数组的长度,看以下案例:
题1:编译错误,因为不能把[3]int类型传递给[]int类型,前者是数组,后者是切片;
题2:编译错误,因为不能把[3]int类型传递给[4]int类型;
题3:编译正确,因为[3]int类型传给[3]int类型合法。