C语言课程心得(五)

数组基本常识

char arr[]={0}; //正确
char arr[]=" "; //正确
char arr[10]=" ";
char arr[10]; //正确
char arr[]; //错误
总结:数组若想表达无误
1.初始化数组给不给大小都可以
2.若没有初始化则一定要给出数组大小
~:~号是对一个数值按位取反
~0 (int型4个字节32个bit位)
=~00000000000000000000000000000000
= 11111111111111111111111111111111
=-1
//复数在内存中存储的是二进制的补码,最高位为符号位0为正1为负
而打印的是这个数的原码
计算公式:原码符号位不变其余按位取反得到反码,反码+1变成补码
因为存储为补码只需要上述过程逆序即可得到原码最终打印出来
11111111111111111111111111111111(补码)-1
=11111111111111111111111111111110(反码)符号位不变其余位按位取反
=1000000000000000000000000001(原码)
=-1(输出结果)
示例:
~5
=~00000000000000000000000000000101
=11111111111111111111111111111010(补码)
=11111111111111111111111111111001(反码)
=10000000000000000000000000000110(原码)
=-6

++和--:
++i(先+) ++i(后加)
#include <stdio.h>

int main(){
int i=0;
printf("%d\n", i); //0
printf("%d\n", ++i); //1
printf("%d\n", i); //1
printf("%d\n", i++); //1
printf("%d\n", i); //2
return 0;
}
强制类型转换:
int i = (int)3.14; //前后类型要一致
&& ||和 & |区别:
&&和||为逻辑符号:
3&&2=1;
0&&2=0;
3||2=1;
3||0=1;
&和|为计算符号:
3&2=0011&0010=0010=2
三目运算符:
(1)?(2):(3)//若(1)为真那么(2)若(1)为假那么(3)
num=(1<2)?1:2;//num为1
例如:
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 2;
(a == 2) ? (a = 4) : (a = 10);
printf("%d\n", a); //输出为4
return 0;
}
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
int main()
{
int a = 3;
(a == 2) ? (a = 4) : (a = 10);
printf("%d\n", a); //输出为10
return 0;
}

register关键字

用法:
register int a = 10; //建议把a定义成寄存器变量(寄存器运行速度快远大于内存)建议是因为寄存器空间有限需要选择

typedef关键字(类型定义/类型重定义)

如定义一个无符号整型变量:
unsigned int num = 10;
但是感觉unsigned int 太长了,太麻烦了可以使用typedef重定义
用法:
typedef unsigned int u_int;//这样就把unsigned int 变成 u_int
unsigned int num = 10;等价于u_int num=10;
注意:
新定义的一定是一个单词 u_int 不可以是 u int (两个单词)

static关键字

将一个变量或函数变为静态
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void test(){
int a = 10;
++a;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 5){
test();
++i;
}
return 0;
}
结果为五个11
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
void test(){
static int a = 10;
++a;
printf("%d\n", a);
}
int main()
{
int i = 0;
while (i < 5){
test();
++i;
}
return 0;
}
结果为11 12 13 14 15
结论:当static修饰局部变量时此变量周期变长了
即在此调用函数时此变量的值不变不会被重新初始化

extern函数

用法:
extern int a;//a为其他.c文件的全局变量(static修饰全局变量)
但若此时a为static int a = 10;则其他文件中主函数就不能不能extern(继承)这个外部变量。
static修饰函数也一样和变量一样。
extern声明外部函数:
extern int hanshu(int , int);//在哪里声明都行只要在调用前,main里外都行。

define定义常量和宏

#define MAX 100(常量)
#define MAX(X,Y) ((X>Y)?X:Y)(宏)//MAX(X,Y)就等价于后边的三目运算表达式且不需要规定参数类型

猜你喜欢

转载自blog.51cto.com/15079723/2590396