操作符
解引用操作符“*”,下标引用操作符“[]"
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;
位操作符&、|、^
他们的操作符必须是整数
- &按位与
- | 按位或
- ^按位异或
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