我给出了的答案,但在理解for语句的初始化器部分中逗号的用法方面似乎有问题:
int i, j, k;
for (i=0, j=0, k=0;
在这个for语句中,逗号是执行三个初始化的顺序操作符。
int j, k;
for (int i=0, j=0, k=0;
在这个for语句中,我得到了注释“循环外的j和k将被循环中的j和k所遮蔽”。
因此,在第一个例子中,逗号是一个顺序操作符,而在第二个例子中,逗号是声明器列表中的分隔符?
我读过问题,我想补充一下,使用逗号运算符,不能做哪些事情。这让我很困惑,因为我可以这样做:
int arr[3];
arr[0]=1,arr[1]=2,arr[2]=3;
但当我这么做的时候
int arr[3],arr[0]=1,arr[1]=2,arr[2]=3;
它给了我一个编译器错误。
我想问的是,逗号运算符在实际操作中有哪些限制?
我对整个顺序点的理解是基本的。我所拥有的只是一些粗略的直觉,即“一旦遇到一个序列点,我们就可以确保以前评估的所有副作用都是完整的”。我还读到,在像printf("%d",a++,++a,a++)这样的语句中,行为被定义为逗号并不表示序列点,而分号则表示序列点。所以,与其凭直觉去猜测和去做,我觉得一个非常严谨和决定性的答案会对我有很大的帮助。
以下类型的语句是安全的&在C中是肯定的:
int a=4,*ptr=&a; //Statement 1
x+=4,y=x*2; //Statement 2 (Assume x and y are integer va
我读过关于的文章,但我不确定这个操作符是否用于如下表达式:
var a, b, c;
这是在工作中使用的逗号运算符还是这里使用的逗号只是声明多个变量的语法的一部分,因此与逗号运算符无关。
类似地,声明数组文字的代码怎么办:
var x = [ 1, 2, 3 ];
在我看来,逗号运算符语法需要在表达式周围加上括号,例如:
x = (2, 3);
但在中并没有明确指出这一点。如果是这样的话,那么这里的前两个片段是否确实没有使用逗号运算符,因为它周围没有括号呢?
请考虑以下情况:
案例1:变量的初始化,包括文字和变量,我以前从未声明或初始化过。
var x = 10, i;
当我打印x的值时,它会打印10。我在想,这怎么会在语法上正确呢?这是出乎意料的事。是虫子吗?
案例2:变量的初始化,变量和文字,我之前已经声明或初始化过。
var i = 10;
var x = i, 10;
然后,我尝试了上面的内容,认为如果CASE 1可以工作,那么上面的也应该能工作。但是,我很惊讶,它没有起作用。相反,它给出了一个错误:Uncaught SyntaxError: Unexpected number。
案例3:变量的初始化,包含两个文本。
var x = 10,
到目前为止,我的理解如下:
逗号运算符允许代码的简洁性,例如int x = 0, y = 0, z = 0而不是int x = 0; int y = 0; int z = 0;。在这种情况下,它有点像分号的语法糖。
逗号运算符充当序列点。因此,在代码f(), g();中,函数f()保证在g()之前执行并产生其所有副作用。但是,如果使用代码f(); g();,情况也是如此。
逗号运算符是一个运算符,而分号只是一个程序标记,它不参与表达式的计算。由于逗号运算符具有如此低的优先级,因此它与分号在这方面的差别很小。
所以,我想知道这两种结构在实践中的语义区别是什么?是否存在使用逗号
为什么这段代码不为y未声明抛出编译错误?
int x = 10, y;
printf("%d", y);
没有像int y;那样的表达式。在我的例子中,控制台打印出来的是32764,它似乎只是未初始化的内存。查看第一行的组装代码,即使在print语句中使用y,, y是否存在也是一样的。
期待看到
error: use of undeclared identifier 'y' printf("%d", y);
我一开始想试一试,如果它被允许做这样的事情:
vector<int> a{1, 2};
vector<int> b{3, 4};
for(auto ai : a, auto bi : b)
{
}
这没有工作,但我期待它,因为大小限制。
然而,我感到惊讶的是,这种做法也没有奏效:
vector<int> b{3, 4};
for(int x = 1, auto bi : b)
{
}
逗号操作符不是用来解决左侧的每一个副作用,然后再往右走吗?
我试图使用逗号来分隔for循环中的多个初始化,但我在下面得到了错误。
在for-循环的第一部分中使用逗号合法吗?
error: too few template-parameter-lists
error: sEnd was not declared in this scope
#include <iostream>
#include <algorithm>
#include <vector>
int main() {
using namespace std;
typedef vector<int> Vc;
Vc v;
在重构各种C和C++代码时,我多次注意到使用逗号而不是分号来分隔语句。像这样的东西;
int a = 0, b = 0;
a = 5, b = 5;
这是我所期望的
int a = 0, b = 0;
a = 5; b = 5;
我知道C和C++允许使用逗号来分隔语句(特别是循环头),但是这两段代码之间有什么区别呢?我的猜测是,由于剪切和粘贴的结果,逗号被留在了里面,但它是一个bug吗?它会影响执行吗?
如果我们在JavaScript中使用逗号,是否保证哪个变量会首先被初始化?
例如,如果我有以下代码:
var a = function() {return 2;} , b = a();
是否保证a的初始化将先于b的初始化
我知道,更好的做法是每次初始化变量时都使用var关键字。但我仍然对我的问题的答案感兴趣,因为我无法在互联网上为JavaScript找到答案。
正如所指出的,我们可以证明JavaScript中的逗号运算符和列表初始化是两件不同的事情。
b = 2, a = 2; console.log(window.a, window.b); //outputs 2 2
var b = 2,
我在一个堆栈溢出帖子( Stack,)上读了几个答案之后,正在玩, 操作符。此外,在阅读完这篇文章:, 分隔符之后,我还在玩。考虑以下两个代码片段:
代码1
#include<stdio.h>
int main(void)
{
int a, b; /* comma functions as a separator */
a = 5, b=9; /* NOT SURE how comma functions */
printf("a = %d \n",a) , printf("b = %d \n",b); /* c
我有一个for循环:
for(var data = 1; data <=10; data++){
var data = $array[data];
var allData = allData + ", " + data;
};
例如:
var data = $array[1] value is "apple"
var data = $array[2] value is "carrot"
当我循环:
var allData = allData + ", " + data;
我要:
var all
谁能解释一下FOR语句中的逗号运算符?
function funct_1(c){
for (var a = x, e = y; 0 < c; ){
var p = c/2;
var c = c/10; // wtf, it is already defined as function argument!!
}
}
而且,像"a++“这样的最后一句话似乎没有了,我从来没有见过这样的东西。那是什么意思?谢谢!
如果你看到这个代码,
class A{
public:
A(int a):var(a){}
int var;
};
int f(A obj) {
return obj.var;
}
int main() {
//std::cout<<f(23); // output: 23
std::cout<<f(23, 23); // error: too many arguments to function 'int f(A)'
return 0;
}
f(23, 23)不编译,因为逗号在这里充当分隔符,
所以我有一个非常简单的ajax设置,它运行得非常完美。
function ajax_post(){
var hr = new XMLHttpRequest();
var f = "foo";
var j = "bar";
hr.open("POST", "ajax7.php", true);
hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
hr.onre
在阅读了以下两篇文章后……
我仍然不确定我不能解析我在其他人的源代码中找到的以下语句:
int i, n, val, locala = a, bestval = -INFINITY;
逗号操作符是按从左到右的顺序计算的,对吗?如果我们使用括号来表示优先顺序,我想我们会得到这样的结果:
(int i, (n, (val, (locala = a, (bestval = -INFINITY)))));
所以,也许,原始版本等同于下面的内容?
int bestval = -INFINITY;
int locala = a;
int val;
int n;
int i;
如果是这样,为什么要将in
有谁能向我解释,为什么下面的代码有不同的输出?
void GenerateMatrix(int mat[][MaxSize],int ran[],const int rows,const int cols)
{
int i,k=0;
while (i<rows)
{
int j=0;
while (j<cols)
{
mat[i][j]=ran[k];
j,k++;
}
i++;
}
}