class Hello {
public static void main(String args[]) {
int i = 10;
i *= i++ + i;
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
根据运算符的优先级,后缀运算符的优先级高于乘法运算符。括号内的操作数具有更高的优先级。
首先评估它们: i*(i++ + i) 所以,现在,括号内是 10+11: i*(21)
i 的当前值为 11
其次,由于下一个优先级计算乘法运算符,它不应该是11*21=231吗?
虽然,我知道答案是 210,为什么我上面解释的逻辑是错误的?
int num1, num2;
Run Code Online (Sandbox Code Playgroud)
double average;
average=(double)(num1+num2)/2;
printf("average: %d", average);
Run Code Online (Sandbox Code Playgroud)
我的测试 printf 显示平均值为: 0
这可能太简单了,但我看不到。我的输入都是“int”,平均值是“double”,但不知怎的,它计算不正确?
std::cout << (true ? "high pass" : false ? "fail" : "pass")
Run Code Online (Sandbox Code Playgroud)
是相同的
std::cout << (true ? "high pass" : (false ? "fail" : "pass"))
Run Code Online (Sandbox Code Playgroud)
既然三元运算符是右结合的,为什么我们不先进行右运算呢?不应该pass打印而不是high pass?
我知道:
int b = 1, c = 2, d = 3, e = 4;
printf("%d %d %d", ++b, b, b++);
Run Code Online (Sandbox Code Playgroud)
导致未定义的行为。自从
在两个序列点之间多次修改任何对象是 UB。 未定义的行为和序列点
但我不知道是否:
int b = 1, c = 2, d = 3, e = 4;
printf("%d", b++ + ++c - --d - e--);
Run Code Online (Sandbox Code Playgroud)
也是UB吗?
我认为递增/递减运算符将首先评估,因为它们之间的优先级从右到左,因为 associativity 。然后算术运算符将从左到右计算。
这将是
(b) + (c + 1) - (d - 1) - (e)
即 1 + (2 + 1) - (3 - 1) - (4)
= (2 - 4)
= -2 …
当我简单地写代码时
String x = null;
System.out.println(x instanceof Object);
Run Code Online (Sandbox Code Playgroud)
输出为false,正如预期的那样。
但当我尝试将其写得略有不同时,即:
public class Main {
public static void main(String[] args) {
String x = null;
System.out.println("Result is: " + x instanceof Object);
}
}
Run Code Online (Sandbox Code Playgroud)
我得到true作为输出。为什么?
x instanced Object应该还是false这样吧?我想得到像这样的输出
Result is: false
Run Code Online (Sandbox Code Playgroud) 我正在做一个练习,创建一个数组并用整数填充元素。我首先将数组的长度输入到 malloc 中作为大小。然后,我在 for 循环中扫描数组中每个点的元素。
这是代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int scaning(int ** array){
int size;
scanf("%d", &size);
*array = malloc(sizeof(int)*size);
//printf("%d\n", size);
for (int i=0; i<=size; i++){
int num;
scanf("%d", &num);
*array[i] = num;
}
return size;
}
int main(){
int * array;
int zero;
zero = scaning(&array);
//printf("%d\n", zero);
printf("LOOPS\n");
for (int i=0; i<= zero; i++){
printf("%d\n", array[i]);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在我输入元素填充数组两次后,出现段错误。我通常输入 5 个数组的大小,输入 2 个数字,然后它就会崩溃。不知道我哪里出错了。有任何想法吗?
c for-loop pass-by-reference operator-precedence dynamic-memory-allocation
我正在做一些关于C语言中操作执行顺序的练习,我遇到了一个我不太理解的情况。
int d = 1;
int e = d--/10; // the result of e will be 0;
Run Code Online (Sandbox Code Playgroud)
在计算“e”的值之前,我们先递减“d”,然后再进行除法。
另一方面,在“f”中,我们在递减“d”之前进行了除法!
int d = 1;
int f = 10/d--; // the result of f will be: 10
Run Code Online (Sandbox Code Playgroud)
我的问题是:既然知道在这两种情况下“d”的减量都是后减量,为什么使用的“d”值存在差异?
我遇到了一段代码,其中<=在 C 中的代数表达式中使用了 。
int x=2, y=4, z=5, m=10;
m+= x * y + z++ <=m+3;
printf("%d, %d", m,z);
Run Code Online (Sandbox Code Playgroud)
我从未见过以这种方式使用关系运算符,并且想知道如何计算其输出。运行时收到的输出是 11, 6。<=这里以什么方式工作?
假设我有\nvoid (*ptr[3])(int) \n并且\nvoid (*ptr)[3](int)
第一个按预期工作。\n但第二个抛出错误。
\n我尝试了这两种方法,但无法找出问题所在。\n错误内容如下:
\n\n\n“..错误:将 \xe2\x80\x98ptr\xe2\x80\x99 声明为函数数组 void\n(*ptr)3;”
\n
我的老师给了我这个问题:编写一个读取整数并打印它的程序。所以我找到了这段代码:
integer_number = int(input("Enter an integer: "))
print("You entered:", integer_number)
Run Code Online (Sandbox Code Playgroud)
我想了解为什么函数:“int”先于“input”
我希望“input”函数比“int”函数先出现,因为“input”具有向用户请求信息以便用户填写信息的功能,而“int”则将给定的字符串转换为整数。