有人可以帮我解决最短步骤评估三个条件的最快方法吗?我有三个条件,如果两个中的任何一个都是真的,那么整个表达式就变成了true另一个false.
我尝试了两种方法:
if ((condition1 && condition2) ||
(condition1 && condition3) ||
(condition2 && condition3))
Run Code Online (Sandbox Code Playgroud)
另一种方法是引入变量i和
i = 0;
if (condition1) i++;
if (condition2) i++;
if (condition3) i++;
if (i >= 2)
//do something
Run Code Online (Sandbox Code Playgroud)
我想要比上面两个更好的任何其他有效方法.
我在内存受限的环境中工作(Atmeta8具有8 KB的闪存)并且需要一个在C中工作的解决方案.
if(turn==2)
{
if(forward) /*then what to do if this if comes true for coming out of outer loop*/
if(columnHead>0)
{
columnHead--;
addr[columnHead] |=1<<(rowHead-1);
}
else
{
columnHead =7;
addr[columnHead] |=1<<(rowHead-1);
}
if(rowTail!=(rowHead-1))
{
addr[columnHead+columnSize] &=~(1<<rowTail);
columnSize++;
rowTail++;
}
else
{
addr[columnTail] &=~(1<<columnTail);
if(columnTail==0)columnTail=8;
columnTail--;
}
back=1;
}
Run Code Online (Sandbox Code Playgroud)
if如果满足条件,我想从外循环出来if(forward)
我已经编写了这段代码,但是在编译时我收到了以下语句的消息"invalid expression"
unsigned short address[] ={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/*array is being initialized here.no problem uptil here.*/
unsigned short rowHead=3;
unsigned short colHead=0;
unsigned short rowTail =0;
unsigned short colTail =0;
unsigned short foodx;
unsigned short foody;
unsigned short turn=0;
void gameOver()
{
unsigned short i=0;
address[] ={0b10000001,0b01000010,0b00100100,0b00011000,
0b00011000,0b00100100,0b01000010,0b10000001};
/*this is the line where compiler complaints as invalid expression.*/
while(1)
{
PORTD &=~(1<<i);
PORTB =address[i];
delay_ms(5);
PORTD |=1<<i;
i%8;
}
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码
#include <stdio.h>
int main(void) {
int arr[] = {10,20,30,40};
int* ptr = arr;
printf("%d\n",sizeof(arr));
printf("%d",sizeof(ptr));
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是
16
4
Run Code Online (Sandbox Code Playgroud)
C中指针的大小为4.'arr'也是指向整数的指针,但其大小为16,这是一个元素大小和元素数量的乘积.另一方面,如果我将相同的指针存储到另一个指针变量中,那么它的大小就变为4.这非常令人困惑.如果我尝试将arr作为参数发送到函数然后在该函数中打印arr的大小,则会发生同样的事情.C如何处理指向数组的指针?
如果我在for循环中写break语句然后将变量更新,然后循环退出,或者只是在循环退出的break语句的执行之后?例如
for(i=0;i<100;i++){
//do something something
if(i==50){
break;
}
Run Code Online (Sandbox Code Playgroud)
循环退出后i的值是多少?