在我声明类型的同一行分配,不返回错误,并在以下示例中正确编译:
#include <iostream>
int main() {
char c[5] = "Hey!";
}
但是,下面的内容不能编译,因为我们知道,在c++中不可能进行数组分配。
#include <iostream>
int main() {
char c[5];
c = "Hey!"; //ERROR: expression must be a modifiable lvalue.
}
C++标准要求所有类型的大小至少为1字节,即使结构没有成员。即
struct x { };
但
sizeof(x) == 1
数组也是如此。声明零长度数组(在C、C++和C99中)是不符合标准的。
int x[0]; // not allowed in C, C++ and C99 standards
那这是为什么?在我看来,这似乎是一个不可缺少的要求,它实际上带来了不一致。
我知道有些编译器允许零长度数组作为扩展,而且C99允许在结构的末尾使用“零”长度数组,但是这更多的是可变长度数组,只有在结构结束时才有可能。
因此,我的问题是:在语言标准中填充零长度数组或要求大小大于0的理由是什么?
根据问题,我想问一下s1和s2在下面的代码中有什么不同:
int main() {
const char* s1 = { "Hello" }; // strange but work as followed
const char* s2 = "Hello"; // ordinary case
return 0;
}
为什么允许额外的花括号?任何对C++标准的引用都是有用的。
我一直在使用c#中的c++和new。在c++中,我使用int a[8]来声明一个数组,如果数组是一个对象,我们通过item[0].SetID(5)来设置值,这会将第一个项的ID值设置为5,但是我不能在c#中这样做。
namespace Arrays
{
class items {
public int ID { set; get; }
public string name { set; get; }
public items(int ID) {
this.ID = ID;
name =
我正在把我的c++程序转换成c,它是一个简单的阶乘函数。我在c++程序中使用了一种有趣的方法,以便在函数每次调用自己时,对它的空间越来越小。这就是它的样子:
cout << setw( number * 3 ) << "" << "number is: " << number << endl;
它不像我所希望的那么容易翻译成c。我的想法(可能是不正确的)是
char c = "";
printf( "%*c number is: %lo\n", number * 3, c
下面的程序在C语言中编译得很好,有警告,但是在C++中编译失败。为什么?原因何在?
#include <stdio.h>
int main(void)
{
char a[5]="Hello";
a[0]='y';
puts(a);
for(int i=0;i<5;i++)
printf("%c",a[i]);
return 0;
}
警告:
Warning:[Error] initializer-string for array of chars is too long [
我知道C++语言和C语言完全不同,但是C++是一个超级C语言集。
我不知道为什么这段代码在C中只使用几个警告就编译和运行,并抛出像scalar object 'a' requires one element in initializer这样的错误
下面是:
#include<stdio.h>
int tabulate(char **head){
//Stuffs here
}
int main(){
char **a={"Abc","Def"};
tabulate(a);
return 0;
}
关于
我希望声明和初始化一个一维托管项数组。
如果是C#代码,我会这样写:
VdbMethodInfo[] methods = new VdbMethodInfo[] {
new VdbMethodInfo("Method1"),
new VdbMethodInfo("Method2")
};
我试图在托管C++中编写(实际上,我正在编写一个生成的程序)相同的东西.
到目前为止,我已经:
typedef array<VdbMethodInfo^, 1> MethodArray;
// How do I avoid pre-declaring
给定java和C++中的类行,并分别在java和C++中进行以下声明:
Line[] p;
和
Line *p;
当运行以下代码时,两种语言在语义上有什么不同:
p = new Line[7];
特别是,这两种语言是否都以相同的方式为数组分配堆内存?
对不起,我做了这个问题的研究,但我仍然觉得我还没有完全理解。
谢谢!
承认,这个问题不是很有趣,但是由于sas日志中的警告有时会非常有用,我想知道这里发生了什么。
考虑下面的最小示例。在step0中,我们创建了一个数据集。在第1步中,我们希望将step0中的某个变量的值复制到step1,但是我们忘记了变量的正确名称(或者我们正确地记住了,但是当我们不在时有人更改了它)。我编写了两个版本的step1,名为step1a和step1b。
Data step0;
Dog = 1;
run;
Data step1a;
value = cat;
run;
Data step1b;
array animals cat;
value = animals[1];
run
第4章第231页“Java中的思考,第2版”中的“数组初始化”一节有如下内容:
在C中初始化数组很容易出错,而且很乏味。C++使用聚合初始化来使其更加安全。Java没有像C++那样的“聚合”,因为所有东西都是Java中的一个对象。它确实有数组,并且数组初始化支持这些数组。
为什么它在C中容易出错和乏味?聚合初始化意味着什么?为什么它更安全?我在布鲁斯·埃克尔( Bruce )的“C++中的思考”(第二版)中偶然看到了C++,但它并没有让我相信任何事情。
对于c++中的字符串数组,我一直使用拆分声明/赋值,如下所示:
size_t arraysize = 2; // some arbitrary value - doesn't matter
char* str_array[arraysize];
int condition = 1; // some condition variable that is set earlier.
if (condition == 0) {
str_array[0] = "hello";
str_array[1] = "sir";
}
else {
s