1.变量命名只能以数字、字母、下划线组成并且不能以数字开头。
#include<stdio.h>
#include<unistd.h>
//变量名只能由数字字母下划线组成,不能以数字开头
int main()
{
//int 2b;
return 0;
}
2.内存中保存的是补码 0的补码取反得补码再求源码是-1。
源码:原始数字
反码:标志位不变,其他位取反
补码:反码+1
#include<stdio.h>
#include<unistd.h>
int main()
{
int a=0;//内存中保存的是补码 0的补码取反得补码再求源码是-1
printf("%d\n",~a);
return 0;
}
3.全局变量和数组在不初始化时,里面都是0
局部数组不完全初始,其他元素是0
局部变量或者局部数组不初始化,里面是随机值
#include<stdio.h>
#include<unistd.h>
int sa;//全局变量和数组在不初始化时,里面是0
int main()
{
int arr[10]={1,2,3,4,5,6,7,8,9,10};
float farr[]={1.1,2.2,3.3,4.5};
int arr1[10]={1,2,3};//不完全初始化,其它元素为0
int arr2[10];//局部变量或者局部数组不初始化里面是随机值
int d;
int i=0;
printf("%d\n",sa);
printf("%d\n",d);
while(i<10)
{
printf("%d ",arr2[i++]);
}
printf("\n");
return 0;
}
4.register建议将变量放入寄存器中。
#include<stdio.h>
#include<unistd.h>
int main()
{
register int a =10;//建议将变量a放入寄存器中
return 0;
}
5.void可以用于函数返回值和参数
#include<stdio.h>
#include<unistd.h>
void test(void)
{
printf("hehe\n");
return;
printf("haha\n");
}
int main()
{
test();
return 0;
}
6.括号不影响++a和a++的操作顺序
#include<stdio.h>
#include<unistd.h>
int main()
{
int a = 10;
int b = (a++);//加括号不好使,一定是先用再加加
printf("b=%d,a=%d\n",b,a);
int c=10;
int d=++c;
printf("c=%d,d=%d\n",c,d);
return 0;
}
7.整数除整数仍然得到整数,并且gcc中除0不会抛出异常。
#include<stdio.h>
#include<unistd.h>
int main()
{
int a=10;
double b=3;//整数除整数,又得到一个整数,并且gcc除0没有抛异常
double c = a/b;
printf("%lf\n",c);
int d =15;
int d1 = d>>1;
printf("d1=%d\n",d1);
int a1=3;
int b1=5;
printf("%d\n",a1&b1);
printf("%d\n",a1^b1);
printf("%d\n",a1|b1);
return 0;
}
8.extern声明外部变量,在同一工程下的.c文件都可以操作这个变量,对于函数也是,等于扩展了变量和函数的可见性。
static修饰局部变量会改变其生命周期(生命周期伴随程序)作用域仍然是局部的函数体内。
static修饰全局变量会导致这个变量仅在所在的.c文件可见,对于同一工程下的其他.c文件不可见(使用extern也不行)。
static修饰函数会导致仅在这个函数所在的.c文件可见,对于同一工程下的其他.c文件不可见。(使用extern也不行)。
static在C++中的使用主要是静态成员变量和静态成员函数。静态成员函数没有this指针,静态函数只能访问静态成员变量,两者均属于整个类而不属于某个对象,可以用对象或者类名驱动。
#include"test.h"
extern int g_va;
extern int Add(int a, int b);
int main()
{
printf("g_va=%d\n",g_va);
int a=10,b=20;
int num = Add(a,b);
printf("%d\n",num);
return 0;
}
#include"test.h"
//static int g_va=1000;//改变了全局变量的链接属性(效果是改变作用域)
int g_va = 1000;
static int Add(int a, int b)
{
return a+b;
}
void test()
{
}
#include<stdio.h>
#include<unistd.h>
void test();
9.typedef给数据类型起别名
#include<stdio.h>
#include<unistd.h>
typedef unsigned int u_int;
int main()
{
u_int num=-1;
printf("%u\n",num);
return 0;
}
10.类型强转写法
#include<stdio.h>
#include<unistd.h>
int main()
{
int a = (int)3.14;
printf("%d\n",a);
return 0;
}
11.逗号表达式的结果是最后一个式子的结果
#include<stdio.h>
#include<unistd.h>
int main()
{
int a=10;
int b=2;
int c=3;
int d=(a=4,b=a-5,c=b+2,c-=4);//逗号表达式的结果是最后一个表达式的结果
printf("a=%d\n",a);
printf("b=%d\n",b);
printf("c=%d\n",c);
printf("d=%d\n",d);
return 0;
}
12.函数调用
#include<stdio.h>
#include<unistd.h>
int Add(int x,int y)
{
return x+y;
}
int main()
{
int x=0,y=0,sum=0;
scanf("%d %d",&x,&y);
sum=Add(x,y);
printf("%d\n",Add(x,y));
return 0;
}
13if else
#include<stdio.h>
#include<unistd.h>
int main()
{
int input =0;
printf("学习编程你能坚持吗?\n");
scanf("%d",&input);
if(input)
{
printf("工作稳定,坚持进步\n");
}
else
{
printf("会栽跟头的\n");
}
return 0;
}
14.while
#include<stdio.h>
#include<unistd.h>
int main()
{
int line = 0;
printf("欢迎入坑\n");
while(line<=20000)
{
printf("敲代码,%d\n",line);
line++;
}
if(line>20000)
{
printf("算是会了一些\n");
}
return 0;
}
15.static修饰局部变量,改变生命周期
#include<stdio.h>
#include<unistd.h>
void test()
{
//int a=1;//10个2
static int a=1;//static 修饰局部变量,改变了其生命周期
a++;
printf("%d ",a);
}
int main()
{
int i=0;
while(i<10)
{
test();
i++;
}
printf("\n");
return 0;
}