一、常量与变量
1、变量
#include<stdio.h>
int main()
{
int a = 10;
return 0;
}
- ‘=’ :为赋值号,赋值号左边a为变量,变量在程序中可以被重新复制。
- 变量在程序中存在有一定的作用域和生命周期,变量的作用域在本函数中,普通变量的声明周期在函数执行结束后其内存就会被回收,这也是函数传参时形参的改变不会影响实参的变化,在函数调用结束后形参的内存就会被回收掉。
- 变量的命名规则 变量中可以包含字母、数字、下划线,但不能以数字开头。例如:
#include<stdio.h>
int main()
{
int a_a1; //合法
int _a1; //合法
int 1a_; //不合法
}
对变量的命名不仅要合法,也要合理,在代码量很大时,对于随意的命名对程序的可读性影响很大,所以命名的合理性在写代码是也要注意,例如:如果定义一个整型变量表示年龄
int age;
2、常量
常量可以是一个具体的数字,字母,字符串,在程序中
int a = 10; //10就为常量
char ch = 'c'; //字符‘c’表示常量
const int a = 20; //此处的a也表示常量
在c语言中const 修饰变量是不能被重新重新赋值,如果你想改变a的值
const int a=20;
a=10; //错误,不能改变
除此之外还有宏定义,例如
#define PI 3.14
宏定义实在预处理的过程将函数中的PI 全部替换为 3.14
#include<stdio.h>
#define PI 3.14
int main()
{
printf("边长为5的圆的面积为:%d\n",5*5*PI);
return 0;
}
此处的PI就会在预编译过程中被替换,在函数的预编译过程会进行 宏替换、注释的替换(替换为空格)、头文件的引入
二、函数运算符
():圆括号 单目运算符,强制类型转换,函数参数表
int main() //圆括号表示函数
{
int a = 10;
char b = (char)a; //表示将int 类型的a转换为char 类型
return 0;
}
[]: 数组元素的下标
int arr[5]={1,2,3,4,5}; //数组下标从0开始到4,不存在arr[5]
’->’:指向结构体成员
用于指向结构体的指针引用结构体成员时使用
’.’ :引用结构体成员
结构体变量引用结构体时使用
typedef struct student{
int age;
char name[20];
}*stuArr,stu;
int main()
{
stu s1;
stuArr p;
p=&s1;
p->age=10; //利用指针访问结构体成员
s1.age=10; //引用结构体成员
}
!:逻辑非
&&:逻辑与
||:逻辑或
int a=10;
int b=0;
if(!a)
{
printf("非a为真");
}
if(a&&b)
{
printf("a与b都为真");
}
if(a||b)
{
printf("a与b至少有一个为真");
}
‘~’:按位取反
‘<<’:左移
‘>>’:右移
‘^’:按位异或
‘&’:按位与
‘|’:按位或
在计算机中数据都是以二进制的形似存储,以上都是二进制条件下数据的运算,在计算机中,位运算要比加减乘除运算的速度快
sizeof:在c语言中sizeof不表示函数,sizeof用于计算字节数
int a = 10;
int *p=&a;
sizeof(a); //a为int类型,在内存中占4个字节
sizeof(p); //p为指针类型,所有的指针类型在内存中都占4个字节
int Fun()
{
return 0;
}
int main()
{
int a=10;
int arr[5]={1,2,3,4,5};
printf("%d\n",sizeof(a++)); //4 在编译时期只确定类型,a不参与运算,a的值不发生改变
printf("%d\n",sizeof(int)); //4 返回int 型所占内存的大小
printf("%d\n",sizeof a); //4 sizeof 后跟变量名时可以不带括号
printf("%d\n",sizeof(arr[5])); //4 arr[5]虽然越界,但sizeof只确定类型,并不访问arr[5]中的内容,故不报错
printf("%d\n",sizeof(Fun())); //4 sizeof计算函数返回值的类型
}
’++’,’–’:自增,自减
int a = 10;
int b;
b= a++; //先将a的值赋给b然后再自增
b= ++a; //先将a自增后将a的值赋给b
‘+’:加法运算符
’-’:求负,减法运算
’*’:指针间接引用符
‘/’:除法运算符
‘%’:求余数运算符
int main()
{
int a = 7;
int b = 2;
printf("%d\n",a+b);
printf("%d\n",a-b);
printf("%d\n",a*b);
printf("%d\n",a/b);
printf("%d\n",a%b);
/*
以上都是整形范围内的运算
*/
}
扩展:
#include<stdio.h>
int main()
{
char ch = '好';
printf("%c",ch);
return 0;
}
在执行这段程序时屏幕上会打印出’?’,我觉得应该时因为每个汉字占两个字节,而char 只占一个字节,所以在赋值的时候只将汉字的中的一个字节赋给了 ch 。改变打印方式为十进制后
#include<stdio.h>
int main()
{
char ch = '好';
printf("%d",ch);
return 0;
}
打印结果为-61
显然不在0-127之间,所以我认为应该是vs 在对不再0-127之间的数进行字符打印时会用’?'代替不能打印的字符。