小编sha*_*eeq的帖子

对于三种情况的排列,最快的算法是什么?

有人可以帮我解决最短步骤评估三个条件的最快方法吗?我有三个条件,如果两个中的任何一个都是真的,那么整个表达式就变成了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中工作的解决方案.

c optimization boolean atmega

7
推荐指数
2
解决办法
415
查看次数

如何摆脱c中的"if"循环?

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)

c if-statement break

1
推荐指数
1
解决办法
3999
查看次数

如何在c中初始化数组?

我已经编写了这段代码,但是在编译时我收到了以下语句的消息"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)

c arrays

0
推荐指数
1
解决办法
1619
查看次数

指向int类型数组的指针的大小是多少?

我有以下代码

#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如何处理指向数组的指针?

c arrays pointers

0
推荐指数
1
解决办法
84
查看次数

break语句如何工作?

如果我在for循环中写break语句然后将变量更新,然后循环退出,或者只是在循环退出的break语句的执行之后?例如

for(i=0;i<100;i++){
//do something something
if(i==50){
break;
}  
Run Code Online (Sandbox Code Playgroud)

循环退出后i的值是多少?

c break

-5
推荐指数
1
解决办法
3913
查看次数

标签 统计

c ×5

arrays ×2

break ×2

atmega ×1

boolean ×1

if-statement ×1

optimization ×1

pointers ×1