我就随手写个博客,可能有错的,大家可以指出来哦~
//我只有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; }