一、变量
1.定义:
数值可以变化的量,在运行过程中只可以改变。
注:未初始化会报错,默认为随机值。不能使用未初始化的局部变量
2.作用域
{}之间,在括号里的是局部变量。 =左边:左值 =右边:右值
3.生命周期
程序或函数运行完后系统自动回收,注意如果变量定义在堆中,需要程序员手动回收,
4.变量存放位置
(1)内存中的栈或堆
①栈:(stack) 大小:1M-2M之间
②堆(heap)大小:堆空间来说,默认是没有软限制的,只依赖硬限制。 (计算机科学中一类特殊的数据结构的统称堆中某个节点的值总是不大于或不小于其父节点的值,一棵完全二叉树)
5.命名方式
(1)字母,数字,下划线,可采用驼峰式命名格式(注:函数名中的每一个逻辑断点都有一个大写字母来标记,例如printEmployeePaychecks();
(2)小驼峰:除第一个单词之外,其他单词首字母大写例如:int myStudentCount;
(3)大驼峰:第一个单词的首字母也大写例如:public class DataBaseUse)
6. 举例
int =10;
二、 常量
1.关键字:const
例如:const int a=10;(常变量,一定要初始化)const修饰的变量叫常变量。
2.#define
(1)宏操作,预编译时宏替换,(预编译时宏替换,注释的替换,替换为空格,头文件的引入)
(2)定义的所有都要大写,例如#define PI 3.14159;(后面可以加分号,可以不加)
(3)举例:
①#define SIZE 10;
int arr[SIZE]={};这种是错误的,在数组中不可以加分号
②#define SIZE 10
int arr[SIZE]={};
三、 运算符
(1)() 函数,提升优先级,强制类型转化
(2)[] 数组的下标
(3)-> 指向符等,多在结构体中用
(4). 引用结构体成员
(5)!(逻辑非)
(6)~ 按位取反
(7)>> 按位右移(相当于除法)
(8)<< 按位左移(相当于乘法)2^n
(9)^ 按位异或
(10)& 取指符或按位与
例
#include <stdio.h>
int main ()
{
int a = 10;
int* p = &a;//*:代表指针
*p = 100;//*:间接访问符 ==》 解引用
printf("%d\n",a);//100
int **pp = &p;//二级指针
**pp = 10000;
printf("%d\n",a);//1000
return 0;
}
(11)| 或 例如a||b||c,若a为真,则后面的不计算
(12)&& 逻辑与 例如a&&b&&c,每个都为真,遇到真后面不计算
#include <stdio.h>
int main ()
{
int i = 1;
int i2 = 0;
int i3 = 2;
if(i++ && i2++ && i3++) //1与0为0,输出为false,后面不计算
{
printf("is true\n");
}
else
{
printf("is false\n");//1与0为0,输出为false
}
printf("%d,%d,%d\n",i,i2,i3);
return 0;
}
#include <stdio.h>
int main ()
{
int i = 1;
int i2 = 0;
int i3 = 2;
if(i++ || i2++ || i3++)//1或0为1,则后面的不执行,只i++,i2++
{
printf("is true\n");//1或0为1,输出true
}
else
{
printf("is false\n");
}
printf("%d,%d,%d\n",i,i2,i3);
return 0;
}
结果:
(13)- 求负,
(14)* ①定义指针 int*p,*p=10,间接访问等
解引用(“解”就是把该地址对应的东西解开,解出来,就像打开一个包裹一样,那就是该变量的值了,所以称为“解引用”)
②乘法
(15)/,%(模)
#include <stdio.h>
int main ()
{
float f1 = 5/2;//2.000000
float f2 = (float)5/2;//2.500000
float f3 = (float)(5/2);//2.000000
float f4 = 5/(float)2;//2.500000
printf("%f\n",f1);
printf ("%f\n",f2);
printf ("%f\n",f3);
printf ("%f\n",f4);
return 0;
}
运行结果:
例题
#include <stdio.h>
int main ()
{
printf("%d\n",10%3);//1
printf("%d\n",-10%3);//-1商-3余1
printf("%d\n",-10%-3);//-1商3还余-1
printf("%d\n",10%-3);//1商-3余1
return 0;
}
(16)== 等于
(17)? : 条件运算符
(18),顺序求值运算
五、关键字sizeof
1.强调:不是函数,是关键字,运算符
2.作用:求当前变量的字节数
3.例如:
(1) 格式
printf("%d\n",sizeof(a));
printf("%d\n",sizeof a );
printf("%d\n",sizeof (int) );
(2)实例
#include <stdio.h>
int main ()
{
float f1 = 5/2;//2.000000
int arr[5] = {1,2,3,4,5};
printf("%d\n",sizeof (arr[5]));//统计数组中第五个数据的所占空间大小,为4
printf("%d\n",sizeof (3+4.5));//两个转化为double了,占8个
printf("%d\n",sizeof 4.5);//double类型的占8个字节
printf("%d\n",sizeof 4);//int占4个
printf("%d\n",sizeof 4+f1);
return 0;
}
最后一个为0(输入错误)
六、应该注意的细节
1.a++和++a
#include <stdio.h>
int main ()
{
int a = 10;
int b = a++;//tmp = a; b = tmp; a = a+1;先赋值再加一
printf("a == %d\n",b);
int c = 10;
int d = ++c;//先加一再赋值
printf("d == %d\n",d);
return 0;
}
结果:
2.指针和二级指针(见上)
3.数组越界的原理
4.程序的调试
(1)打断点
(2)逐句调试,逐过程调试
5.a+=100 即为a=a+100
6.两个类型不一样的加法
可以强制类型转化或者由系统自动转化为更大的类型。
7.用char打印汉字
#include<stdio.h>
char main ()
{
char arra[]={'高'};
printf ("s%\n",arr);
return 0;
}
六、总结
通过本次课的学习,我知道了 变量和常量以及运算符的相关知识。变量是在运行过程中可以变化的,必须要赋予初值,作用域在{}之间,当程序运行完或进程结束后由系统回收,在堆中定义的变量需要手动回收。加了const的变量叫常变量,在编译时确定值。常量在运行中不会发生变化,#define是宏替换,可用在整个程序中,在预编译时替换宏,此时还进行注释的替换,和头文件的引入操作。运算符在使用时应该注意a++和++a的区别,sizeof是关键字,而不是函数,编译时确定类型,不参与运算()。所有指针都是四个字节。