c++分文件编写
1.创建.h头文件 sort.h
2.创建源文件 sort.cpp
3.头文件中声明函数
4.源文件中定义函数
5.在主函数文件中链接.h文件,直接调用即可
实际可以只建立头文件,在头文件中声明和定义函数即可,然后直接在需要调用的文件中引用即可,不用单独建一个文件定义函数
数组传递中的问题
// 数组
int arr[] = {12,345,1,3,5,46,52,1,4546,63,986};
测试 maxNum.h,在main.cpp中调用后,输出为345而非4546
#include<iostream>
using namespace std;
int maxArr(int arr[])
{
int len = sizeof(arr)/sizeof(int);
cout <<len<<endl;
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int k=0;k<len;k++)
cout << arr[k] <<endl;
return arr[len-1];
}
可以看到,传递过去的数组长度只有前两个数据,无法遍历整个原始数组。
解决方案
参考链接: https://blog.csdn.net/wdqbupt/article/details/6858676
原因:C++实际上是将数组作为指针来传递,而该指针指向数组的第一个元素。至于后面数组在哪里结束,C++的函数传递机制并不负责
所以可以将数组的长度一起传过去。
int maxArr(int arr[],int len)
{
//int len = sizeof(arr)/sizeof(int);
cout <<len<<endl;
for(int i=0;i<len-1;i++)
{
for(int j=i+1;j<len;j++)
{
if(arr[i]>arr[j])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int k=0;k<len;k++)
cout << arr[k] <<endl;
return arr[len-1];
}
成功遍历并排序整个数组,并返回最大值。
由此,参考链接中的大佬的总结是:数组仅在定义其的域范围内可确定大小,非常认可!!!