可以在编译时定义静态数组,如下所示:
const std::size_t size = 5;
unsigned int list[size] = { 1, 2, 3, 4, 5 };
Run Code Online (Sandbox Code Playgroud)
问题1 - 是否可以通过使用各种元编程技术在编译时"以编程方式"分配这些值?
问题2 - 假设数组中的所有值都是相同的barr,是否可以在编译时以编程方式选择性地分配值?
例如:
const std::size_t size = 7;
unsigned int list[size] = { 0, 0, 2, 3, 0, 0, 0 };
Run Code Online (Sandbox Code Playgroud)
更新: Georg Fritzsche的解决方案非常棒,需要一些工作才能在msvc和intel编译器上进行编译,但这仍然是解决问题的一种非常有趣的方法.
在C++中,使用char和char [1]之间有什么区别(如果有的话).
例子:
struct SomeStruct
{
char x;
char y[1];
};
Run Code Online (Sandbox Code Playgroud)
对于unsigned char,原因如下吗?
在D中,所有数组文字都是动态数组,因此由GC分配.
即便在这个简单的例子中:
int[3] a = [10, 20, 30];
Run Code Online (Sandbox Code Playgroud)
数组是堆分配的,然后复制到a.
如何在没有堆分配的情况下初始化静态数组?
你可以手动完成:
int[3] a = void;
a[0] = 10;
a[1] = 20;
a[2] = 30;
Run Code Online (Sandbox Code Playgroud)
但这充其量是乏味的.
有没有更好的办法?
嗨,我建立了一个测验应用程序.我有以下(values /)question.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="question">
<item name="correct">A</item>
<item name="wrong">B</item>
<item name="wrong">C</item>
<item name="wrong">D</item>
</string-array>
</resources>
Run Code Online (Sandbox Code Playgroud)
我想问一个有四个可能答案的问题,但是当我用Java检索我的答案时......我不知道哪个答案是正确的.所以我决定在item标签中使用name属性来传递'correct'或'wrong'答案的值.反正是否有名称和标签值?
因为当我使用String [] test = res.getStringArray(R.array.question); 我只能得到数组中每个项目的值.
或者因为这是我第一次使用Android.有没有其他合适的方法来做到这一点?
谢谢
对于下面的C++代码片段:
class Foo {
int a[]; // no error
};
int a[]; // error: storage size of 'a' isn't known
void bar() {
int a[]; // error: storage size of 'a' isn't known
}
Run Code Online (Sandbox Code Playgroud)
为什么成员变量也不会导致错误?这个成员变量的含义是什么?
我通过CodeBlocks 8.02使用gcc版本3.4.5(mingw-vista special).
在Visual Studio Express 2008 - Microsoft(R)C/C++ Optimizing Compiler 15.00.30729.01 for 80x86上,我收到以下消息:
class Foo {
int a[]; // warning C4200: nonstandard extension used : zero-sized array in struct/union - Cannot generate copy-ctor or copy-assignment operator when UDT contains a zero-sized array
};
int …Run Code Online (Sandbox Code Playgroud) 嗨:)我正在尝试创建NSStrings的静态C阵列.
这是我试过的:
static NSString** polygonNames = {@"Radical Isotope", @"Point", @"Line", @"Triangle", @"Square", @"Pentagon", @"Hextagon", @"Heptagon", @"Octagon", @"Nonagon", @"Decagon", @"Hendecagon", @"Dodecagon", @"Tridecagon", @"Tetradecagon", @"Pentadecagon", @"Hexadecagon", @"Heptadecagon", @"Octadecagon", @"Enneadecagon"};
Run Code Online (Sandbox Code Playgroud)
没有编译器错误,但我收到41个警告,所有这些都是以下三个中的一个:
"warning: initialization from incompatible pointer type"
"warning: excess elements in scalar initializer"
"warning: (near initialization for 'polygonNames')"
Run Code Online (Sandbox Code Playgroud)
这让我相信当我使用这个课程时,我会遇到大量的信号或其他一些内存访问错误......
初始化NSStrings静态数组的正确方法是什么(最好是内联,我想使用C数组,而不是NSArrays)?
我们都知道静态数组的基本规则:
int size = 20;
char myArray[size];
Run Code Online (Sandbox Code Playgroud)
不合法.和.
const int size = 20;
char myArray[size];
Run Code Online (Sandbox Code Playgroud)
没关系
但是,这个怎么样.
int f(const int size)
{
char myArr[size];
}
void main()
{
f(2);
f(1024);
}
Run Code Online (Sandbox Code Playgroud)
MSVC说它是一个错误,gcc似乎编译并执行它很好.
显然,它不便携,但应该被接受吗?
在那种情况下哪个编译器做对了?
此外,如果编译器允许它,是否应该通过良好的编程标准/实践进行授权?
编辑:我的想法是我想要速度的堆栈分配,但我不知道在编译时数组的大小.我知道还有其他一些解决方案,堆栈分配可能不是一个有意义的优化,但我认为这是一个有趣的用法.
我正在编写一些代码,我需要一个类变量,它是一个静态int数组.我明白我可以在头文件中用这样的东西做这个,啊:
#ifndef A_H_
#define A_H_
class A
{
public:
static const int a[];
};
const int A::a[] = {1,2};
#endif
Run Code Online (Sandbox Code Playgroud)
如果我将此标题只包含在另一个文件中,如下所示,main.cpp:
#include "A.h"
#include <iostream>
using namespace std;
int main()
{
A myA;
cout << "0: " << myA.a[0] << endl;
cout << "1: " << myA.a[1] << endl;
}
Run Code Online (Sandbox Code Playgroud)
但是假设我需要我的A类有点复杂,我想要一个A.cpp文件.我将保持我的main.cpp文件相同,但然后更改如下(我刚刚添加了一个函数,printA):
#ifndef A_H_
#define A_H_
class A
{
public:
void printA() const;
static const int a[];
};
const int A::a[] = {1,2};
#endif
Run Code Online (Sandbox Code Playgroud)
然后在文件A.cpp中:
#include "A.h"
#include <iostream>
using namespace …Run Code Online (Sandbox Code Playgroud) 如何在 C 中指定静态数组的动态数组?
我想制作一个包含两个静态数组动态数组的结构。
struct indexed_face_set {
double * [3] vertices;
int * [3] faces;
};
Run Code Online (Sandbox Code Playgroud)
这应该包含一个动态的顶点列表,每个是 3 个双精度,以及一个动态的面列表,每个都是 3 个整数。
在将数组传递给函数后,如何获取C中整数数组中存在的元素数?以下代码不起作用.
size=sizeof(array)/sizeof(array[0]);
Run Code Online (Sandbox Code Playgroud) static-array ×10
c++ ×5
arrays ×3
c ×2
android ×1
attributes ×1
char ×1
class ×1
coding-style ×1
d ×1
init ×1
inline ×1
objective-c ×1
performance ×1
resources ×1
struct ×1
types ×1