我就随手写个博客,可能有错的,大家可以指出来哦~
//我只有C的基础
第一题
#include <iostream>
using namespace std;
//根据地址对传入的变量进行操作,
// 可以理解为把这个变量的地址赋给了形参的地址,
// 那么对形参的操作就是对该地址对应的变量操作
void swap(int& x,int& y)
{
int temp = 0;
temp = x;
x = y;
y = temp;
}
int main()
{
int a = 4;
int b = 6;
swap(a,b);
cout<<a<<","<<b<<endl;
return 0;
}
第二题
#include <iostream>
using namespace std;
template <int len>
// 第一,在c中,数组在作为参数的时候就退化为指针,
// 对一个地址来取大小呢,如果是32位系统的话即为4,
// 如果是64位系统的话为8,所以呢,
// 在函数中sizeof获取的是指针的长度而不是数组的长度。
// 第二呢,在函数中,sizeof的处理时间的在编译期,
// 也就是说对于动态生成的数组大小是不能用sizeof来算出来的。
// 下面是一篇博客,说这个的,可以看看
// https://blog.csdn.net/xiaonan153/article/details/81411600
// int count(T* arr)
// {
// //得到错误结果
// return sizeof(arr)/sizeof(arr[0]);
// }
int count(int (&arr)[len])
{
return sizeof(arr)/sizeof(arr[0]);
}
//建议搜搜资料
int main()
{
int arr[] = {1,2,3,4,7};
cout<<count(arr)<<endl;
return 0;
}
第三题
#include <iostream>
using namespace std;
template <class T>
void fill(T* a,int start,int end,T value)
{
for(int i = start;i<end;i++)
{
a[i] = value;
}
}
int main()
{
char arr[10] = {'0'};
fill(arr,0,10,'w');
for(int i = 0;i<10;i++)
{
cout<<arr[i]<<endl;
}
return 0;
}
第四题
#include <iostream>
using namespace std;
template <class T>
// size是两个数组中长度最小的一个数字
// 为什么不在函数里面量取,因为对我来说比较蛮烦,
// 可以参照第二题
// 量取可以放在主函数里面做的,而且易于理解
T inner_product(T*a,T*b,int size)
{
T sum = 0;//如果是浮点数数组就是float了
for(int i = 0;i<size;i++)
{
sum = sum + a[i]*b[i];
}
return sum;
}
int main()
{
float arr1[] ={1,0,3.4,4,7};
float arr2[] = {4,5,0,3,7.8};
int size1 = sizeof(arr1)/sizeof(arr1[0]);
int size2 = sizeof(arr2)/sizeof(arr2[0]);
int size = size1;//先把第一个数组的长度给size
//判断哪个数组长度大
if(size1>size2)
{
size = size2;
}
cout<<inner_product(arr1,arr2,size)<<endl;
return 0;
}