目录
前言
这里是个人学习C语言基础部分的一些笔记或是个人一些学C的认识理解。因为这里是基础部分,所以一个知识点的细化部分没有写上。小白上路各位大牛、老铁们随意指正批评亦或是给一些意见!
PS:C语言关键字讲解链接是和本系列相互联系的,内容方面相互补充,大家可以一起观看。
本系列上册:http://t.csdn.cn/SynNp
本系列下册:http://t.csdn.cn/ICP0j
本篇源代码集合:C_NS: 小牛马学C (gitee.com)
C语言关键字讲解链接:http://t.csdn.cn/w1HxF
数组
数组:顾名思义,是由一种数据类型组成的的。
数组的每个元素都有一个下标,下标是从0开始的。 数组可以通过下标来访问的。
数组是连续储存在一块空间的。
例如:
先面三种写法都是正确的。
- arr1是把5个数全部初始化为0;
- arr2是没有规定数组大小,随意初识化。但是后面在使用的时候,注意往里面赋值的时候不要超过第一次初始化的数量。
- arr3后面没初始化完的会直接初始化0.
int main()
{
int arr1[5] = { 0 };
int arr2[] = { 1,2,3,4,5,6 };
int arr3[5] = { 1,2,3 };
return 0;
}
PS:arr[] 在 [ ] 里面的数必须是常量或者表达式。
int arr[2 * 1] = { 0 };
int arr[2] = { 0 };
操作符
算数操作符
+ - * / (不要余数部分,只要整数部分) % (取模 取余数)
用法
int main()
{
int a = 10;
int b = 3;
int c = 0;
c = a + b;
printf("%d\n", c);
c = a - c;
printf("%d\n", c);
c = a * b;
printf("%d\n", c);
c = a / b;
printf("%d\n", c);// /是看整数部分
c = a % b;// 10÷3= 3 …1
printf("%d\n", c);//%是取模的意思,取的是余数
}
位移操作符
>> <<
位移操作符是跟二进制位相关系的,移动的是二进制位。
int main()
{
int a = 1;//整型占4个字节 32为bit位 (这里没有32个 就简单写下)
int b = a << 2;//移动了两位
printf("%d\n", b);//4
printf("%d\n", a);//1
}//a的值是不变的 除非a变的值重新赋予a
// 1的二进制-> 0000000000000001 << 向右移了两个单位后-> 0000000000000100
<<:是最小位的二进制数字往右移,然后缺的位置补0
>>:是最小位的二进制数字往左移,然后缺的位置补0
PS:
二进制、八进制、十进制、十六进制相互不会的转化的可以点这个链接:http://t.csdn.cn/zzaRG
位操作符
&(按位与) |(按位或) ^(按位异或)
int main()
{
int a = 3; //011
int b = 5; //101
int c = a & b;//001
printf("%d\n", c);
return 0;
}//输出结果为1
这里给大家说个口诀
按位与 :全一则一 按位或:有一则一 按位异或:有一则一全一则零
上面代码我们可以看到 3的二进制转化为 011,5的二进制是101 然后应为&(按位与)根据口诀,全一为一 :==》001 ==》1
赋值操作符
= += -= *= /= &= ^= |= >>= <<=
int main()
{
//就跟自己给的值进行操作
int a = 2;
//a = 20;//赋值 ==判断相等
//a = a + 10;//这两种情况一样
//a += 10; //这两种情况一样
a <<= 2; //这两种情况一样
a = a << 2;//这两种情况一样
printf("%d\n", a);
return 0;//同理
}
上面的+= 可以写成 a += 2==》a=a+2 其余的也是同理。
注意:
- 上面+= 在 a *= 2+4的时候要注意 这是写成 a=a*(2+4),不要以为*的优先级高先算*,其余同理。
- 在写if、while、for、do……while的判断条件的时候,要注意 = 和 == 的区别
单目操作符
! | 逻辑反操作 |
- | 负值 |
+ | 正值 (基本会省略) |
& | 取地址 |
sizeof | 操作数的类型长度(以字节为单位) |
~ | 对一个数的二进制按位取反 |
-- | 前置、后置-- |
++ | 前置、后置++ |
* | 间接访问操作符(解引用操作符) |
(类型) | 强制类型转换 |
举例:
!逻辑反操作符
首先我们要知道在C语言里面 0为假,非0为真。
int main()
{// 0-假 非0--真
int a = 10;
int b = 20;
printf("%d\n", a);//10
printf("%d\n", !b);//0 把假的变为真的 真的变为假的
return 0;
}
& 取地址
变量是以地址的形式储存在内存里面 。&p:以地址的形式打印
int main()//&取地址操作符
{
int num = 10;
printf("%p\n", &num);
return 0;
}
sizeof 计算变量/类型/数组所占空间的大小 变量可以省略括号
int main()//sizeof
{
int a = 4;
int arr[] = { 1,2,3,4,5,6 };//数组类型里的每个元素是int
printf("%d\n", sizeof(a));
printf("%d\n", sizeof a );
printf("%d\n", sizeof(int));
printf("%d\n", sizeof(arr));
return 0;
}
~ 按位取反
int main()//~按位(2进制)取反 原来是0 的取1 1取0
{//原码、反码、补码
//原码(符号位不变 其他位取反)-->反码(最后一位+1)——-->补码
//补码(最后一位-1)--->反码(符号位不变 其他位取反)---->原码
//正数的原反补是一样的
//最高位是符号位 1为复数 为0是正数
//例 111111111111111111111111 补码
// 111111111111111111111110 反码
// 100000000000000000000001 原码
int a = 0;
int b = ~a;//内存存贮的是补码
printf("%d\n",b); //打印出来的是原码
return 0;//输出结果为-1
}
++、--
int main()
{
int a = 10;
int b = --a; //前置-- ,先--,再使用 a=9 b=9
//int b = a--;//后置--,先使用,再-- a=9 b=10
//int b = ++a;//前置++ ,先++,再使用 a=11 b=11
//int b = a++;//后置++,先使用,再++ a=11 b=10
printf("a=%d b=%d\n",a,b);
return 0;
}
PS:如果对于后置--、或者后置++。我的理解是 在这一次的使用先不去--或者++在下一次使用变量的地方使用++或者--后的值。
强制类型转换 (类型) 一般不建议使用
int main()//强制类型转化,让一个类型转化为一个类型
{//原本3.14是double类型强制转换位int
int a = (int)3.14;
printf("%d", a);//3
return 0;
}
PS:浮点数转化为整型的时候,后面的小数部分会自动舍弃,没有四舍五入的操作。
关系操作符
> | 大于 |
>= | 大于等于 |
< | 小于 |
<= | 小于等于 |
!= | 用于测试“不相等” |
== | 用于测“相等” |
PS:这个就跟着字面意思去使用就行
逻辑操作符
&& 逻辑与 ||逻辑或
逻辑与和逻辑或可以理解成中文里面并且和或者的意思。
- && 逻辑与:两边同时为真才为真
- || 逻辑或:两边有一边为真就是真
int main()
{//0为假 非0为真
int a = 3;
int b = 5;
int c = a || b;// ||逻辑或 两个为假才为假 有一个真就是真 两真为真
//int c = a && b;//逻辑与&& 全为真 一真一假为假
printf("%d\n",c);//后面输出为1
return 0;
}
习题例子
判断是否为闰年
int main()
{//1.能被4整除并且不能被100整除是闰年
//2.能被400整除是闰年
int year = 0;
scanf("%d",&year);
if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
printf("%d ", year);
}
return 0;
}
注意:
- 当||左边的判断为真右边的将不会执行,直接判断为真
- &&和||两个当判断为真会返回1,当判断不成立会返回0。
- a>b是为假然后返回0,&&是要两边都成立,所以直接是0.
条件操作符
expe1?expe2:exp3
如果exp1为真 就是exp2被执行 如果为假就是exp3.(0为假,非0为真)
int main()//条件操作符
{
int a = 10;
int b = 20;
int max = 0;
max = (a > b ? a : b);
printf("max=%d\n", max);//max=20
return 0;
}
逗号表达式
epx1,exp2,exp3 由逗号隔开的表达式。
代码执行顺序是从左向右依次执行。
int main()
{
int a = 0;
int b = 0;
b = (a += 1, b += 1, a += b, b += a);
printf("%d\n", a);
printf("%d\n", b);
return 0;
}
下标引用、函数调用和结构成员
[] () . (下册再说) ->(下册再说)
int Add(int x, int y)
{
int z = 0;
z = x + y;
return z;
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
arr[4];//[]下标引用操作符
printf("%d",arr[4]);//5
int a = 10;
int b = 20;
int sum;
sum=Add(a, b);//这个括号就是函数调用操作符
printf("sum=%d\n", sum);
return 0;
}
欢乐的时光总是特别短,又到了时间说拜拜。欢迎各位老铁评论交流,感谢各位的捧场,咱们下一篇文章见!!!