Tag: 表达式

C字符串长度 – 这是有效的代码吗?

这种类型的表达式在C中是否有效(在所有编译器上)? 如果是的话,这是好的C吗? char cloneString (char clone[], char string[], int Length) { if(!Length) Length=64 ; int i = 0 ; while((clone[i++] = string[i]) != ‘\0’, –Length) ; clone[i] = ‘\0’; printf(“cloneString = %s\n”, clone); }; 这会更好,更糟,无动于衷吗? char *cloneString (char clone[], char string[], int Length) { if(!Length) Length=STRING_LENGTH ; char *r = clone ; while ( //(clone[i++] […]

C和JAVA中递增递减运算符的差异

请考虑以下声明: int a[]={1,2,3,4,5,6,7,8}; int i=0,n; n=a[++i] + i++ + a[i++] + a[i] ; 根据我的逻辑,n应该是10.但是我在c中得到不同的输出(输出是7)但是在java中我得到的预期结果是10.在增量和减量运算符在c中工作的方式有什么不同和java。 这是我的确切c和java代码: #include int main() { int a[]={1,2,3,4,5,6,7,8}; int i=0,n; n=a[++i] + i++ + a[i++] + a[i] ; printf(“%d”,n); getch(); return 0; } 输出的Java代码:10 public class HelloWorld{ public static void main(String []args){ int a[]={1,2,3,4,5,6,7,8}; int i=0,n; i=0; n=a[++i] + i++ + a[i++] […]

一元+/-运算符怎么可能在“-a”或“+ a”中引起整数提升,’a’是算术数据类型常量/变量?

这看似微不足道的一行来自C书我的Mike Banahan&Brady (第2.8.8.2节) 。 我可以理解隐式促销如何在c=a+b这样的表达式中发挥作用,具体取决于操作数的类型,但我无法理解如何以及在何种情况下同样可以在-b ,其中b是任何合法的操作数。 你能解释一下然后给出一个恰当的例子吗? 提取的文字如下: 通常的算术转换应用于运算符的二进制forms的两个操作数。 仅对运算符的一元forms的操作数执行整体促销。 更新: 为了避免被忽视,我在这里根据OUAH在评论中的回答添加了我所要求的内容 – 书中说“ Only the integral promotions are performed ”…这是否意味着在x=-y ,其中’x’这样的表达式中’是一个长双,’y’是一个浮点数,如果我们明确使用一元运算符,’y’将不会被提升为long double? 我知道会这样,但要求它更清楚地了解“只有整体促销……”部分。 更新: 你能举例说明促销是如何为以下逐位运算符发挥作用的吗? 对于最后三个,我应该假设每当在变量上使用它时,它首先被提升为整数类型吗? 那么“通常的算术转换”究竟对前三个意味着什么呢? 你能举一个小例子吗? 如果可以在这里解决,我不想将其作为单独的问题发布。

x && y || z如何评估?

特定 int x=1,y=2,z; 你能解释一下为什么结果: x && y || z 是1? x && y = 1 x && y || z = 1

如何将三元运算符合并到优先攀爬算法中?

我按照本网页 “优先攀登”部分给出的解释,使用带有各种一元前缀和二进制中缀运算符的优先攀爬算法来实现算术评估器。 我还想包括三元运算符(即三元条件运算符?: :)。 网页上给出的算法使用以下语法: E –> Exp(0) Exp(p) –> P {B Exp(q)} P –> U Exp(q) | “(” E “)” | v B –> “+” | “-” | “*” |”/” | “^” | “||” | “&&” | “=” U –> “-” 如何将三元运算符合并到这个语法中?

评估以下表达式

以下代码段: int i=-3,j=2,k=0,m; m=++i && ++j || ++k; 可以使用两个概念进行评估,我相信: 1.由于++运算符的优先级高于逻辑运算符,因此首先计算所有增量运算符,然后&&的优先级高于|| 将被计算。在此过程中,k将递增。 2.First &&运算符将被评估。对于这个++ i和++ j将被计算。因为&&运算符的结果是1,所以不需要评估++ k.So k将不会递增。 当我在系统上尝试它时,结果certificate推理2是正确的,1是错误的。 为什么会这样?

替换字符串

我正在做像excel这样的事情,我有这样的事情: 1 2 3 A1 B1 C1 它替换指定内容的内容,其中A1替换1的内容.B1替换2 …等的内容… 我正在使用多维数组,我做这样的事情: int offset = 0, readCharCount; while(sscanf(matris[i][c] + offset, “%c%d%*c%n”, &col, &linha, &readCharCount) == 2){ //printf(“%c, %d\n”, col, linha); //strcpy(matris[i][c], matris[linha-1][col – ‘A’]); offset += readCharCount; //printf(” {%c, %d}”, col, linha); //printf(“\n”); } 但是当我有A1 + B1 + C1和其他东西时,我不能替换总内容,因为其他参考将被删除…. 所以,在单元格,A1 + B1 + C1,我想改变B1指定的内容….我想这样: This -> A1+B1+C1 […]

C中赋值表达式的结果是什么?

在以下代码中: int c; while((c=10)>0) c = 10评估为什么? 是1表示值10成功分配给变量c,还是10? 为什么?

post和pre-increment运算符的以下哪种组合在C中具有未定义的行为?

我读过,有没有人可以解释这些未定义的行为(i = i ++ + ++ i,i = i ++等…)并在浪费超过2小时的时间后尝试理解 “comp.lang.c常见问题解答”中的序列点时间试图通过gcc编译器解释以下结果。 expression(i=1;j=2) ijk k = i++ + j++; 2 3 3 k = i++ + ++j; 2 3 4 k = ++i + j++; 2 3 4 k = ++i + ++j; 2 3 5 k = i++ + i++; 3 2 k = i++ […]

评估C表达

int main() { int i = -3, j = 2, k = 0, m; m = ++i || ++j && ++k; printf(“%d %d %d %d\n”, i, j, k, m); return 0; } 我认为&&优先于|| 根据这个逻辑++j应该执行,但它永远不会,程序输出-2 2 0 1 。 这里发生了什么? 中间步骤是什么?