C语言基础部分(中)

目录

前言

数组

操作符

算数操作符

 用法

 位移操作符

位操作符

赋值操作符

单目操作符

 举例:

 关系操作符

 逻辑操作符

条件操作符

逗号表达式

下标引用、函数调用和结构成员


前言

这里是个人学习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;
}

欢乐的时光总是特别短,又到了时间说拜拜。欢迎各位老铁评论交流,感谢各位的捧场,咱们下一篇文章见!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值