&&||的记忆与短路
Created|Updated
|Post Views:
||
===
A||B
记忆如果当A与B都是false才false,其余都是true(只有1个假)
短路
如果||的左侧表达式为真,则不会执行右侧表达式。
&&
A&&B
记忆如果当A与B都为true才true,其余都是false(只有1个真)
短路
如果&&的左侧表达式为假,则不会执行右侧表达式。
Related Articles
2020-03-20
字符串输入'char*和char[]'
不同点 定义char* a这个a是变量, 可以修改char b[]这个b是常量, 不能改变 内存空间 一个指针,一个数组 没有开辟空间123char* str; //没有开辟空间scanf("%s", str);//虽然可以读入,但指针是乱指的,可能会擦拭本来的程序导致崩溃printf("%s", str); 这里在C primer plus上看到,这里的参数是个未初始化的指针,str会指向任何地方。所以,有可能会scanf改写某个地址上的值,从而擦掉程序中的代码。导致程序异常结束。 开辟空间123char* st;st = "hello"; //开辟空间printf("%s", st); 字符串的几种输入 当以数据形式赋值时这种形式可以 1char str[10] = "ferry"; 这种形式不行(关键理解,数组的形式中str是常量)123char str[10];str = "ferry"; // str被看作(数组的...
2020-10-28
关于二维数组名和指针的指针
我们来看一段代码 12345678void f(int **a){}int main(){ int a[2][2]; f(a);} 这个代码是会报错的,error: cannot convert 'int (*)[2]' to 'int**' 很明显,二维数组名不是指向指针的指针(int **),而是一个指向数组的指针int (*)[2] 如果非要用指针的指针,可以这样 1234567int c[3]={1,2,2};int d[3]={4,5,6};int **aa = new int *[2];*(a)=c;*(a+1)=d;
2020-03-20
枚举类型
前言enum Day{mon, tue, wed, thu, fir, sat, sun};枚举类型是为了减少繁多的整数定义。诸如mon(默认=0),tue这些是枚举符(int类型的常量)对应一个数字。 可以给枚举列表中的常量赋值 没有赋值的枚举符会根据前面被赋予的常量++ 概念mon, tue,把这些看作常量。 定义1234enum Day //Day是类型名,可不写{ mon, tue, wed = 1, thu, fir, sat, sun}day; //变量名 用法 给枚举变量赋值,然后输出 123456789101112enum Day{ mon, tue, wed, thu, fir, sat, sun};int main(){ enum Day day;//定义变量 day = tue; printf("%d", day); return 0;} 可以用for循环遍历元素(要依赖连续的++值,中间不能有赋值) 1...
2020-04-11
函数和指针
前言首先,了解两个不同的概念。 函数指针这是个指针。它指向函数的地址。 指针函数这是个函数。它用来返回指针。 声明函数指针指针有它所对应的类型,比如int*,int类型的指针。所以函数指针也有其类型。我们又知道,要将一个地址赋给一个指针,它们对应的类型要相同。 首先,函数的声明有两要素。(1)函数的返回值 (2)函数接收的参数的类型 如果有一个函数指针和一个函数,它们各自的两要素一样,这就可以让这个函数的地址赋给这个函数指针。 例如**声明函数指针时只需把(*pf)这个指针和ToUpper这个函数名换掉 函数声明:void ToUpper(char *);函数指针的声明:void (*pf)(char *); **这样一来,(*pf)当作ToUpper 注意 这里必须要将*pf用()括起来。如果不,就成了指针函数了。 在以后调用函数也要()括起来 使用 首先,我们要知道函数的地址怎么表示。数组就把数组名作为它的首元素地址。函数代码就把函数名作为函数起始处的地址。 赋函数地址给指针pf = ToUpper 怎么通过函数指针调用函数pf指针存有函数的地址,(*pf...
2020-03-16
函数中参数(地址和变量)
前言函数中使用参数是否会改变主调函数中的变量?全局变量在函数如何改变?示例函数中的全局变量12345678int x = 1;int function(){ int x; x = 2; printf("%d, x); //x = 2;}printf("%d", x); //x = 1; 在块中,重新定义了局部变量x,(因为同名)所以全局变量暂时被覆盖。当跳出块时x变为全局变量。 1234567int x = 1;int function(){ x = 2; printf("%d, x); //x = 2;}printf("%d", x); // x = 2; 因为全局变量随处可用,所以可在块中修改x的值。所以全局变量很容易被修改,一般将固定值设为全局变量,使用const修饰。 函数中的参数。一般由主调程序将变量传给函数。 例如函数 1234int function(const int arr[], int x, int ...
2020-04-09
结构体声明和初始化
Introduction声明结构类型声明struct person{...}; 这个struct person起的作用就是一般声明中的int 例如:定义struct person类型的变量。struct person ferry, *pferry 声明过程与定义结构变量,可以组合成一个步骤。 12345struct /*无结构标记*/{ int a; int b;}library; 但如果要多次使用模板,就要加上标记。 1234567typedef struct BTNode{ char data; struct BTNode* lchild; struct BTNode* rchild;}BTNode; 这时编译器还没有在内存中分配空间。什么时候开始分配呢,当然是在初始化变量的时候。 初始化结构变量struct person ferry;这样就初始化了ferry这个变量,同时为该变量分配空间。当然,我们可以用这结构类型定义多个变量。这样就可以存储不同的信息。 初始化成员在刚开始声明结构中就有表明了要什么样的数据类型,再到...
Contents
