我有一个头文件abc.h
//abc.h
unsigned int *get(void)
{
static unsigned int input[] =
{
1,
2, 2,
4, 5,
6, 7
};
return input;
}
现在,我想读取这个输入(从头文件,而不是从某些文本文件)到我的主cpp文件说xyz.cpp
我正在考虑使用数组来访问这些元素,但我认为它不会起作用。
int arr[6];
arr=get();
第一个元素是测试用例数n,第二个和第三个元素是二维数组的维度,其余元素是二维数组的值。所以我需要输入n,行的值,2D数组的列和值arr [rows] [columns]
关于如何实现这一目标的任何想法?
编辑:我真的无法弄清楚为什么这个问题会被低估。 我同意这不是一个好的实现,但我得到了一个输入头文件,我只能通过这个头文件读取数据!!
答案 0 :(得分:3)
如果您能够使用此文件编译程序,则无需读取任何内容。这个数组及其值将被编译到您的程序中,您可以在适当的位置访问它们
您的xyz.cpp文件应如下所示:
#include "abc.h" // given abc file located in the same directory
int main(){
unsigned int * myArrayPtr = get();
// here comes some processing and, if you want, reading values from this array;
unsigned int numberOfCases = myArrayPtr[0];
unsigned int * dimensionsArrayPtr = myArrayPtr + 1;
unsigned int xArraySize = dimensionsArrayPtr[0];
unsigned int yArraySize = dimensionsArrayPtr[1];
// and etc.
// Most interesting part to represent those values as two dimensional array
// I left to you :)
return 0;
}
另外,你应该记住这个技巧只能因为头文件中的数组声明为静态而起作用。另外,你的程序会有不确定的行为。
还有一个。如果在头文件中定义了函数体,则应将其声明为 inline 。 只要这个头只包含在一个cpp文件上 - 它就可以了。但当它包含更多的一个代码文件时,您将得到已定义的链接器错误。
我建议你详细了解cpp中的指针。这篇文章足够好http://www.cplusplus.com/doc/tutorial/pointers/
关于静态关键字 - 要完全理解这个例子 - SO本身就有很好的答案 The static keyword and its various uses in C++