操作符(笔记)

操作符

解引用操作符“*”,下标引用操作符“[]"

int arr[10];//创建数组
arr[9]=10;/使用下标引用操作符

[ ] 的两个操作数是arr和9

  • arr,是指数组元素的首地址
  • arr+9,是跳过了9个元素,指向了第10个元素
  • *(arr+9),就是指第10个元素
在这里插入代码片
```int main()
{
	int a = 10;//*解引用操作符
	int* p = &a;//int*是类型,p里面放的a的地址
	*p = 20;    //*p,指向p里地址的内容,也就是a=20
	printf("%d", a);
	return 0;
}

强制类型转换(类型 )

srand((unsigned int )time(NULL))

"sizeof"操作数的类型长度,创建变量所占空间大小,单位是字节(注意区分与strlen的区别)

sizeof与strlen的区别:
sizeof是操作符,不是函数,求操作数的类型长度,是创建变量所占空间的大小,单位是字节
strlen是库函数,用来求字符串长度。

  • 说明sizeof与strlen的区别
  
int main()
{

	char arr1[] = "abcdef";//有\0
	char arr2[] = { 'a','b','c','d','e','f' };
	printf("%d\n", sizeof(arr1));//7 a b c d e f \0
	printf("%d\n", sizeof(arr2));//6 a b c d e f 
	
    printf("%d\n", strlen(arr1));//6 求字符串长度
	printf("%d\n", strlen(arr2));//得的整个数组的大小
}
7
6
6
34

   

问:1、2, 3、4分别输出什么

//
void test1(int arr[])
{
	printf("%d\n", sizeof(arr));//(2)-------4或者8
}
void test2(int ch[])
{
	printf("%d\n", sizeof(ch));//(4)-------4或者8
}
int main()
{
	int arr[10] = {0};
    char  ch [10] = {0};
	printf("%d\n", sizeof(arr));/(1)-----40  4*10
	printf("%d\n", sizeof(ch));(3)------10  1*10
	test1(arr);//其实是调用的数组的地址
	test2(ch);//
	return 0;
}

关系操作符:==用于测试相等

if("abc"=="abcdef")//是错的,这样比较的是两个字符串首字符的地址
要用strcmp()函数进行比较

注意:在变成过程中,==和=要注意区分

条件操作符(三目操作符) 表达式1?表达式2 :表达式3

如果表达式1为真算表达式2,表达式2,作为整个表达式的结果;
如果表达式1为真算表达式3,表达式3,作为整个表达式的结果。

int main()
{
	int a = 3;
	int b = 0;
	if (a > 5)
	{
		b = 3;
	}
	else
	{
		b = -3;
	}
		return 0;
	}
(a > 5) ? (b = 3) : (b = -3);
a > 5 ? 3 : -3;

位操作符&、|、^

他们的操作符必须是整数

  1. &按位与
  2. | 按位或
  3. ^按位异或
int num1=1;//00000001
int num2=2;//00000010
num1 & num2=0;//00000000
num1 | num2=3; //00000011
num1 ^ num2=3;//00000011


练习:不创建临时变量,实现两个数交换

//不创建临时变量,实现两个数交换
//利用^符号,但这个方法只适用于整数
int main()
{
	int a = 3;
	int b = 5;

	printf("交换前:a=%d b=%d\n", a, b);
	//相同的数异或为0;异或0为数本身
	//a^a=0;  a^0=a;  
	//异或操作符支持交换律
	a = a ^ b; //a=3^5
	b = a ^ b;//b=3^5^5, 5^5=0, 0^3=3
	a = a ^ b;//a=3^5^3, 3^3=0, 0^5=5

	printf("交换前:a=%d b=%d\n", a, b);

	return 0;
}
//这个存在溢出问题
int main()
{
	int a = 3;
	int b = 5;

	printf("交换前:a=%d b=%d\n", a, b);
	//会有溢出问题
	a = a + b;
	b = a - b;
	a = a - b;

	printf("交换前:a=%d b=%d\n", a, b);

	return 0;
}

前置++、前置–、后置++、后置–

前置++先加加在使用
前置- -先减减再使用
后置++先使用再加加
后置- -先使用再减减

前置++,前置- - 同理

int a=3;
int b=++a;//a先自增,a=a+1,b=a,
printf("%d %d",a,b);//a=4,b=4;

后置++,后置- - 同理

int a=3;
int b=a++;//a先赋值给b,b=a,a再进行自增,a=a+1;
printf("%d %d",a,b);//a=3,b=3

关于后置++进一步理解

int a=10;
printf("%d",a--);//先使用,所以输出a=10,然后a再进行自减
printf("%d",a);//此时在打印a,输出a=9
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值