在我看来,定义总是意味着存储分配.
在以下代码中,int i在程序堆栈上分配一个4字节(通常)存储并将其绑定到i,i = 3并将3分配给该存储.但是因为goto,定义被绕过,这意味着没有分配存储空间i.
我听说局部变量在函数的入口处(f()在这种情况下)分配在它们所在的位置,或者在定义点处.
但无论哪种方式,如何i在尚未定义的情况下使用它(根本没有存储空间)?执行时分配给值3的位置在哪里i = 3?
void f()
{
goto label;
int i;
label:
i = 3;
cout << i << endl; //prints 3 successfully
}
Run Code Online (Sandbox Code Playgroud) 当我尝试以下代码时,我得到了提到的错误.
if(a==1)
int b =10;
Run Code Online (Sandbox Code Playgroud)
但以下在语法上是正确的
if(a==1)
{
int b = 10;
}
Run Code Online (Sandbox Code Playgroud)
为什么是这样?
有没有办法在实际初始化之前声明这样的变量?
CGFloat components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
Run Code Online (Sandbox Code Playgroud)
我想它声明这样的东西(除了这不起作用):
CGFloat components[8];
components[8] = {
0.0, 0.0, 0.0, 0.0,
0.0, 0.0, 0.0, 0.15
};
Run Code Online (Sandbox Code Playgroud) JavaScript声明和未声明变量之间的主要区别是什么,因为delete运算符不适用于声明的变量?
var y = 43; // declares a new variable
x = 42;
delete x; // returns true (x is a property of the global object and can be deleted)
delete y; // returns false (delete doesn't affect variable names)
Run Code Online (Sandbox Code Playgroud)
为什么会这样?全局声明的变量也是窗口对象的属性,为什么不能删除它?
如何在MySQL中为普通查询声明变量?
例如,
declare @myVar date;
set @myVar = something;
select * from someTable where someColumn = @myVar;
Run Code Online (Sandbox Code Playgroud)
我试过,语法似乎是错的......我错过了什么?
为什么这个C++代码不能在VS2010下编译:
for ( int a = 0, short b = 0; a < 10; ++a, ++b ) {}
Run Code Online (Sandbox Code Playgroud)
虽然这个做了:
short b = 0;
for ( int a = 0; a < 10; ++a, ++b ) {}
Run Code Online (Sandbox Code Playgroud)
是否禁止在for-loop初始化程序中声明两个不同类型的变量?如果是这样,你怎么解决它?
我是C#的新手,想要了解价值观是如何运作的.如果我查看一个正常的整数值,它有三个重要部分:类型,名称和值.
int testInt = 3;
| | |
Type Name Value
Run Code Online (Sandbox Code Playgroud)
但是当我看到浮点值时,由于后缀,它会让我感到困惑F.
float testFloat = 3.0F;
| | | |
Type Name Value Type
Run Code Online (Sandbox Code Playgroud)
现在有两种类型,如果没有F后缀,则值为double.但是,当我可以用声明双变量时,为什么会发生这种情况
double testDouble = 3.0D;
Run Code Online (Sandbox Code Playgroud)
将double作为第一个词应该是足够了,不应该吗?带有后缀M的十进制值也是如此:
decimal testDecimal = 3.0M;
Run Code Online (Sandbox Code Playgroud)
然后,当涉及到其他后缀时,它开始让我感到困惑:
ulong bigOne = 2985825802805280508UL;
Run Code Online (Sandbox Code Playgroud)
我ulong之前在测试中使用过,并且知道它u是"无符号"的,并且它的值是正常值的两倍.然后你再次得到U作为后缀,谷歌的文字就像谷歌说的那样.据我了解,"文字"是包含数字的值类型.但我不明白的是,即使没有后缀,为什么这个ulong工作呢?
ulong bigOne = 2985825802805280508;
Run Code Online (Sandbox Code Playgroud)
然后我尝试了不同的东西来理解后缀的重要性
byte testLong = 12312UL;
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为字节(254)的值太高而后缀不会将其转换为长变量.
为什么第一个单词(类型)不足以申报?第一个词应该足以告诉类型.最好的做法是始终为值赋予后缀吗?
Scott Meyers 在 Effective Modern C++, Item 30 page 210 中写道,有
无需
static const在类中定义完整的数据成员;仅声明就足够了,
那么示例代码是
class Widget {
public:
static const std::size_t MinVals = 28; // MinVals' declaration;
...
};
... // no defn. for MinVals
std::vector<int> widgetData;
widgetData.reserve(Widget::MinVals); // use of MinVals
Run Code Online (Sandbox Code Playgroud)
我确信这static const std::size_t MinVals = 28;既是声明又是定义,因为它给了一个值MinVals,但评论似乎声称这只是一个声明;第二条评论实际上声称没有定义。代码后面的文字,确实是读
MinVals缺乏定义。
这证实这static const std::size_t MinVals = 28;不是一个定义,所以我有点困惑。
cppreference对我帮助不大(我的粗斜体):
如果声明
static了整型或枚举类型的数据成员(而不是),则可以使用初始化器对其进行初始化,其中每个表达式都是常量表达式,就在类定义中:constvolatileRun Code Online (Sandbox Code Playgroud)struct X { const static int …
标题说明了一切,但我会提供更多说明:
看到许多javascript示例,其中所有变量都被声明为类型var,并且看到对其他数据类型的支持,为什么不声明这样的特定数据类型的变量?意思是,为什么不是这样的:
string hello = 'Hello, World'
用来代替
var hello = 'Hello, World'
查看像OReilly Javascript这样的网站显示其他类型的保留字.再次,为什么不使用它们?难道不会这样做:typeof(variable)==='string';不再需要吗?
#include <stdio.h>
int main() {
int c = c;
printf("c is %i\n", c);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我正在定义一个名为的整数变量c,我将其值赋给自己.但这怎么可以编译呢?c尚未初始化,那么如何将其价值分配给自己呢?当我运行程序时,我明白了c is 0.
我假设编译器正在生成为c变量分配空间的汇编代码(当编译器遇到int c语句时).然后它接受未初始化空间中的任何垃圾值并将其分配回去c.这是发生了什么?
c ×3
c++ ×3
variables ×3
javascript ×2
scope ×2
c# ×1
declaration ×1
for-loop ×1
initializer ×1
literals ×1
mysql ×1
static ×1
syntax-error ×1