在C++中,
i = ++++j;
Run Code Online (Sandbox Code Playgroud)
在代码中工作正常,但是当我使用时,
i = j++++;
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Operand for operator "++" must be an lvalue.
Run Code Online (Sandbox Code Playgroud)
为什么我收到此错误?
我正在学习C,我想出了这个例子
#include <stdio.h>
int MyAdd(int);
main ()
{
int i;
int c = 0;
c = MyAdd(5);
printf("%d\n", c);
}
int MyAdd(int a)
{
if(a > 0)
return a + MyAdd(--a);
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我自己运行这个,我计算15.(5 + 4 + 3 + 2 + 1)但是当我运行它时,我得到10 ...为什么??? 在第一次,我们得到5+(再次执行func)等等.
什么之间的区别--x的x-1?我有一个方法,计算我尝试100的前n个数字的总和,结果如下:
int sumaRec(int _suma){
if (_suma > 0)
{
return _suma + sumaRec(--_suma);
}
else
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我把--_suma 结果是4950,当我把_suma -1结果是5050
有谁能解释为什么?请.
以下代码旨在专门返回值36而不是它返回49但不能看到如何或为什么.任何帮助,将不胜感激.
#include "stdafx.h"
#include<stdio.h>
#include<stdlib.h>
#define MUL(a,b) a*b
#define ADD(a,b) a+b
static int Func1(void)
{
static int n = 1;
// Returns 4
return n*++n;
}
int main()
{
static int Incs = Func1();
printf("%d\n", MUL(ADD(1, Incs), MUL(3, 4)));
}
Run Code Online (Sandbox Code Playgroud) 我试图理解括号如何影响表达式中的优先级:
int arr[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto b = arr;
std::cout << *(++b) << std::endl;
// output : 1
Run Code Online (Sandbox Code Playgroud)
在这段代码中,我得到了预期的输出,但如果我将其更改为:
std::cout << *(b++) << std::endl;
// output 0
Run Code Online (Sandbox Code Playgroud)
我得到0了输出.由于括号我b++将首先进行评估,然后进行解引用.看来我错了,那么我完全去除括号和测试与*++b和*b++并获得意味着括号并不影响这种表达的优先级相同results.Does?为什么这两个表达式的结果是等价的:
*(b + 1)
*(++b)
Run Code Online (Sandbox Code Playgroud)
但事实并非如此*(b++)?
signed char ch=5;
while(ch = ch--)
printf("%d",ch);
Run Code Online (Sandbox Code Playgroud)
我看了这个.清楚地说明了声明和声明(;)的结尾是序列点.
所以我不明白为什么上面的那个运行无限时间并打印相同的值[5].
我是C++的新手.我基本上是自学.我遇到了一个我正在练习的Hangman游戏项目.我的问题是随机字生成.
我知道例如,int n=rand()% 10意味着生成0到10范围内的随机数.
现在在游戏中有一个包含10个单词的10个单词的数组.我感到困惑的是,如果从0到10的数字是随机生成的,那么这将是从11个随机数中选择的.但是,该数组只有10个元素(0-9).
当随机发生器选择10时会发生什么?元素10不存在于数组中,对吗?
那么这段代码应该int n=rand()% 9不是吗?
此外,在游戏中选择所有单词之前,是否可以重复相同的单词?那显然不是理想的.如果可以的话,我该如何防止这种情况?
我无法理解下面代码的输出是如何"-3"的?
#include <stdio.h>
void main()
{
int a = -5;
int k = (a++, ++a);
printf("%d\n", k);
}
Run Code Online (Sandbox Code Playgroud)
int k = (a++, ++a);在c或c ++中这个陈述背后的概念是什么 ?
奇数数组以这种方式分组:first数字是第一组,下一个2数字形成第二组,下一个3数字形成第三组,依此类推.
团体:
现在我想查找给定数字是否是组中数字的总和并找到该组的订单号.
我写了下一个代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int k;
scanf("%d", &k);
int x = 1;
while( x * x * x < k )
x++;
if( x * x * x != k )
x = 0;
printf("%d", x);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
然后我尝试将while循环更改为下一个循环:
while( x * x * x++ < k )
; …Run Code Online (Sandbox Code Playgroud) 我在gcc上运行我的C代码来理解前/后增量运算符.然而,我看到的结果并不是我所期望的.就像第6行一样,因为我是5,它应该是
8 7 6 5 5
Run Code Online (Sandbox Code Playgroud)
但它是 8 7 6 5 8
然后显示最后一行14 14 14 14.有人可以解释一下这种行为.我曾预料到
14 14 13 12
这个编译器是否依赖?是否序列点上的printf函数的beahviour未定义?
#include <stdio.h>
int main()
{
i = 5;
printf("%d %d %d %d %d \n", i, i++, i++, i++, i);
printf("%d \n", ++i);
printf("%d \n", ++i);
printf("%d \n", ++i);
printf("%d %d %d %d \n", i, ++i, ++i, ++i);
}
Run Code Online (Sandbox Code Playgroud)