我总是这样宣告
char *c = "line";
Run Code Online (Sandbox Code Playgroud)
是一样的
char c[] = "line";
Run Code Online (Sandbox Code Playgroud)
所以我做到了
char **choices = { "New Game", "Continue Game", "Exit" };
Run Code Online (Sandbox Code Playgroud)
这给了我一个不兼容的指针类型,在哪里
char *choices[] = { "New Game", "Continue Game", "Exit" };
Run Code Online (Sandbox Code Playgroud)
没有.理解这个有什么帮助吗?
有什么区别:
Object o = null; 和Object o; (只是声明)有人可以回答我吗?
以下代码是否构成未定义的行为,因为我在变量声明之前跳转并通过指针使用它?如果是这样,标准之间是否存在差异?
int main() {
int *p = 0;
label1:
if (p) {
printf("%d\n", *p);
return 0;
}
int i = 999;
p = &i;
goto label1;
return -1;
}
Run Code Online (Sandbox Code Playgroud) 如果我有以下内容:
char test[10] = "#";
Run Code Online (Sandbox Code Playgroud)
是test[1]通过test[9]保证\0吗?或者只test[1]保证是\0?
我是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)的值太高而后缀不会将其转换为长变量.
为什么第一个单词(类型)不足以申报?第一个词应该足以告诉类型.最好的做法是始终为值赋予后缀吗?
我正在阅读JP Mueller和J. Cogswell撰写的"C++ All-in-One for Dummies"并偶然发现:
#include <iostream>
using namespace std;
int main()
{
int ExpensiveComputer;
int CheapComputer;
int *ptrToComp;
...
Run Code Online (Sandbox Code Playgroud)
这段代码首先初始化所有涉及的东西 - 两个整数和一个指向整数的指针.
只是为了确认,这是一个错误,应该读作'......通过声明',对吧?对我来说,这样的基本错误仍然会出现在书中,这一点很奇怪.
来自外部变量Wiki:
如果extern关键字和初始化值都不存在,则该语句可以是声明或定义.由编译器来分析程序的模块并做出决定.
我无法完全理解关于C的这个陈述的含义.例如,它是否意味着:
int i;
Run Code Online (Sandbox Code Playgroud)
不一定是声明(因为我一直假设到现在为止),但可能是一个定义,以及(通过定义和声明在同一网页的定义,没有双关语意)?
简而言之,就是上述陈述:a.只是声明,或b.声明+定义?
参考:变量声明和定义
收到的答复摘要:
Run Code Online (Sandbox Code Playgroud)Declaration Definition Tentative Definition Initialized int i; (inside a block) Yes Yes No No int i=5; (inside a block) Yes Yes No Yes(to 5) int i; (otherwise) Yes No Yes Yes(to 0) extern int i; Yes No No No All definitions are declarations but not vice-versa.
在Oracle的PL-SQL中,您可以声明一个变量并根据表列定义其类型:
declare var1 table.column%TYPE;
Run Code Online (Sandbox Code Playgroud)
是否可以在MS SQL Server中执行类似的操作?
虽然讨论的Type(identifier);语法和它是如何声明,我碰到Type(::x);不锵工作.我希望给定一个全局变量x,它将被::x视为一个表达式(::x + 2作品)并转换::x为Type.但是,它给出了编译器错误.
这是一个简短的例子:
int x;
int main() {
int(::x); //does not compile
int(::x + 2); //compiles
}
Run Code Online (Sandbox Code Playgroud)
Clang 3.5给出的编译器错误是:
错误:'x'的定义或重新声明不能命名全局范围
但是,GCC 4.9.0编译就好了.这段代码有效吗?
我可以将数组中的每个值分配给C#中的一行中的变量吗?这是Ruby代码中我想要的一个例子:
irb(main):001:0> str1, str2 = ["hey", "now"]
=> ["hey", "now"]
irb(main):002:0> str1
=> "hey"
irb(main):003:0> str2
=> "now"
Run Code Online (Sandbox Code Playgroud)
我不确定我在C#中是否可能需要什么.
编辑: 对于那些暗示我只是将字符串"嘿"和"现在"分配给变量的人,这不是我想要的.想象一下:
irb(main):004:0> val1, val2 = get_two_values()
=> ["hey", "now"]
irb(main):005:0> val1
=> "hey"
irb(main):006:0> val2
=> "now"
Run Code Online (Sandbox Code Playgroud)
现在,该方法get_two_values返回字符串"hey"和"now" 的事实是任意的.实际上它可以返回任何两个值,它们甚至不必是字符串.
declaration ×10
c ×3
c++ ×3
c# ×2
string ×2
arrays ×1
definition ×1
expression ×1
goto ×1
java ×1
literals ×1
null ×1
pointers ×1
sql-server ×1
terminology ×1
types ×1
variables ×1