目录
1. 数组
1.1 定义数组
1.2 数组的下标
1.3 数组的使用
2. 操作符
算数操作符
/ 操作符
% 操作符
移位操作符
位操作符
赋值操作符
单目操作符
关系操作符
逻辑操作符
条件操作符(三目操作符)
逗号表达式
下标引用、函数调用和结构成员
结语
1. 数组
要存储 1-10 的数字,怎么存储?
C语言中给出了数组的定义:一组相同类型元素的集合。
1.1 定义数组
#include
int main()
{
int a = 1; int b = 2; int c = 3; int d = 4; //当定义多组相同类型的变量时,可以选择使用定义数组。
int arr[10] = { 1,2,3,4}; //通过数组,可以定义一组相同类型的元素。
char ch[5] = { 0 }; //不完全初始化,剩余会默认初始化为0.
char ch1[] = { 'a','b','c','d' }; //自动开辟所需要的空间。
char ch2[] = { 0 }; //只会开辟一个空间。
return 0;
}
1.2 数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。
要存储 1-10 的数字,怎么存储?
C语言中给出了数组的定义:一组相同类型元素的集合。
#includeint main() { int a = 1; int b = 2; int c = 3; int d = 4; //当定义多组相同类型的变量时,可以选择使用定义数组。 int arr[10] = { 1,2,3,4}; //通过数组,可以定义一组相同类型的元素。 char ch[5] = { 0 }; //不完全初始化,剩余会默认初始化为0. char ch1[] = { 'a','b','c','d' }; //自动开辟所需要的空间。 char ch2[] = { 0 }; //只会开辟一个空间。 return 0; }
1.2 数组的下标
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。
C语言规定:数组的每个元素都有一个下标,下标是从0开始的。
数组可以通过下标来访问的。
数组内容可以通过下标访问
#includeint main() { int arr[10] = { 0 }; printf("%dn", arr[8]); printf("%dn",arr[10]); //由于下标范围是0-9,所以arr[10]属于越界访问行为 return 0; } //-------------- //编译器编译结果为 //0 //- 858993460
越界访问可能会导致程序崩溃,程序出错等严重后果。
1.3 数组的使用
数组的输入和输出
#includeint main() { int i = 0; int arr[10] = { 0 }; //输入10个值给数组 while (i < 10) { scanf("%d", &arr[i]); i++; } i = 0; //输出10个值 while (i < 10) { printf("%dn", arr[i]); i++; } return 0; }
2. 操作符
算数操作符
+ - * / %(取余)
+ - * / %(取余)
算数操作符中 + - * 与平常运算相同,所以不做多解释,重点解释 / 和 % 操作符。
/ 操作符
#include
int main()
{
int a = 7 / 2;
printf("%dn", a); //打印结果为3
float b = 7 / 2;
printf("%fn", b); //打印结果为3.000000
float c = 7.0 / 2;
printf("%fn", c); //打印结果为3.500000
float d = 7.0 / 2.0;
printf("%fn", d); //打印结果为3.500000
return 0;
}
除号两端操作数如果都是整数,执行整数的除法,至少有一个操作数为浮点数,执行的才是浮点数除法
% 操作符
#include
int main()
{
int a = 7 % 2;
printf("%d", a); //打印结果为 1
int b = 7 % 2.0; //加上此行代码会报错,% 操作符的两个操作数必须是整数。
return 0;
}
移位操作符
>>(右移操作符) <<(左移操作符)
位操作符
&(按位与) ^(按位异或) |(按位或)
除号两端操作数如果都是整数,执行整数的除法,至少有一个操作数为浮点数,执行的才是浮点数除法
#includeint main() { int a = 7 % 2; printf("%d", a); //打印结果为 1 int b = 7 % 2.0; //加上此行代码会报错,% 操作符的两个操作数必须是整数。 return 0; }
移位操作符
>>(右移操作符) <<(左移操作符)
位操作符
&(按位与) ^(按位异或) |(按位或)
>>(右移操作符) <<(左移操作符)
&(按位与) ^(按位异或) |(按位或)
移位操作符和位操作符以后讲解。
赋值操作符
= += -= *= /= %= >>= <<= &= |= ^=
= += -= *= /= %= >>= <<= &= |= ^=
由于赋值操作符作用类似,不再依次举例。
#includeint main() { int a = 10; //创建变量并初始化 a = 20; //进行赋值操作 a += 5; //等价于a = a + 5 printf("%dn", a); //打印结果为25 a *= 5; //等价于a = a * 5 printf("%dn", a); //打印结果为125 //剩余复合操作符与+= *= 操作符用法类似,不做太多解释。 return 0; }
单目操作符
例如:2+3,2为加操作符的左操作数,3为加操作符的右操作数,所以加操作符是一个双目操作符。
所以单目操作符是只有一个操作数的操作符。
例如:2+3,2为加操作符的左操作数,3为加操作符的右操作数,所以加操作符是一个双目操作符。
所以单目操作符是只有一个操作数的操作符。
| 单目操作符 | 含义 |
|---|---|
| ! | 逻辑反操作 |
| - | 负值 |
| + | 正值 |
| & | 取地址 |
| sizeof | 操作数的类型长度(以字节为单位) |
| ~ | 对一个数的二进制按位取反 |
| -- | 前置、后置 -- |
| ++ | 前置、后置 ++ |
| * | 间接访问操作符 ( 解引用操作符 ) |
| (类型) | 强制类型转换 |
!操作符
#includeint main() { int a = 10; if (a) //非零为真 { printf("11"); //打印为11 } if (!a) //!操作符使得真变假,假变真。 { printf("22"); //不进行打印 } return 0; }
+ - 操作符
+ - 操作符改变值的正负
#includeint main() { int a = 10; printf("%dn", +a); printf("%dn", -a); return 0; } //----------------- //编译器结果为 //10 //- 10
sizeof 操作符
计算操作数所占空间的类型大小,单位字节。
#includeint main() { int a = 10; char ch = 'a'; int arr[10] = { 0 }; printf("%dn", sizeof(a)); printf("%dn", sizeof(ch)); printf("%dn", sizeof(arr)); return 0; } //--------------------- //编译器运行结果为 //4 //1 //40
计算数组元素个数
#includeint main() { int arr[10] = { 0 }; int size = sizeof(arr) / sizeof(arr[0]); //数组元素所占的总空间/单个元素所占空间=元素个数 printf("%d", size); return 0; } ------------ 编译结果为 10
++ -- 操作符
#includeint main() { int a = 10; int b = ++a; //前置++,先++,后使用(赋值) printf("a=%d b=%dn", a, b); //打印为a=11 b=11 int c = 10; int d = a++; //后置++,先使用(赋值),后++。 printf("c=%d d=%d", c, d); //打印为c=10 d=11 return 0; }
#includeint main() { int a = 10; int b = --a; //前置--,先--,后使用(赋值) printf("a=%d b=%dn", a, b); //打印为a=9 b=9 int c = 10; int d = a--; //后置--,先使用(赋值),后--。 printf("c=%d d=%d", c, d); //打印为c=10 d=9 return 0; }
(类型) 强制类型转换
#includeint main() { int a = 3.2; //double类型转化为int,可能丢失数据。 int b = (int)3.14; //进行强制类型转换。 printf("%d", b); //打印结果为3,丢失数据。 return 0; }
关系操作符
>(大于) >=(大于等于) <(小于) <=(小于等于) !=(不等于) ==(等于)
#include
int main()
{
int a = 3;
int b = 5;
if (a != b)
{
printf("haha"); //打印haha
}
if (a == b)
{
printf("hehe"); //不打印
}
return 0;
}
逻辑操作符
&&(逻辑与) ||(逻辑或)
#include
int main()
{
int a = 3;
int b = 0;
if (a && b) //a并且b为真时,为真
{
printf("hahan");
}
int c = a && b;
printf("%dn", c);
if (a || b) //a或b,一个为真时,为真
{
printf("hehe");
}
return 0;
}
a&&b 当a、b同时为真时,整体为真,一个为假时,整体为假。(一假为假)
a||b 当a、b一个为真时,整体为真,a、b同时为假时,整体为假。(一真为真)
条件操作符(三目操作符)
exp1 ? exp2 :exp3
#include
int main()
{
int a = 10;
int b = 0;
if (a > 5)
{
b = 3;
}
else
{
b = -3;
}
return 0;
}
>(大于) >=(大于等于) <(小于) <=(小于等于) !=(不等于) ==(等于)
&&(逻辑与) ||(逻辑或)
#includeint main() { int a = 3; int b = 0; if (a && b) //a并且b为真时,为真 { printf("hahan"); } int c = a && b; printf("%dn", c); if (a || b) //a或b,一个为真时,为真 { printf("hehe"); } return 0; }
a&&b 当a、b同时为真时,整体为真,一个为假时,整体为假。(一假为假)
a||b 当a、b一个为真时,整体为真,a、b同时为假时,整体为假。(一真为真)
条件操作符(三目操作符)
exp1 ? exp2 :exp3
#include
int main()
{
int a = 10;
int b = 0;
if (a > 5)
{
b = 3;
}
else
{
b = -3;
}
return 0;
}
exp1 ? exp2 :exp3
上述代码等价于b = (a > 5 ? 3 : -3);
当a大于5成立,则3为整个表达式的结果,否则-3为整个表达式的结果。
逗号表达式
exp1 , exp2 , exp3 ......expN
#include
int main()
{
int a = 3;
int b = 5;
int c = 0;
int d = (a += 2, b = b - c + a, c = a + b);
printf("%dn", d); //打印为15
printf("a=%d b=%d c=%d", a, b, c); //打印为a=5 b=10 c=15
return 0;
}
exp1 , exp2 , exp3 ......expN
逗号表达式特点:从左到右依次计算,整个表达式结果为最后一个表达式的结果。
下标引用、函数调用和结构成员
下标引用
[ ] (下标引用操作符)
#includeint main() { int arr[10] = { 0 }; arr[4] = 5; printf("%d", arr[4]); //打印为5 return 0; }
数组建立和访问时出现的方括号即为下标引用操作符。
函数调用
( ) (函数调用操作符)
#includeint Add(int x, int y) { return x + y; } int main() { int c = Add(2, 3); printf("%d", c); return 0; }
Add函数后的圆括号,main函数,printf函数后的圆括号即为函数调用操作符。
结构成员
结构成员涉及结构体,暂时不讲。
结语
好了,今天的初始C语言先分享到这里,希望我的博客能对大家有帮助。如果大家觉得菜菜写的还可以的话,请点赞+收藏哦!



