变量代表一个具有名字的,具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序的运行期间,变量的值是可以改变的。
变量的作用范围:在花括号之间。
int main()
{
int a = 10;
int b = 20;
int c = 30;
return 0;
}
定义变量:字母,数字,下划线,但不能用数字开头。
注意:变量由小写组成,尽量不要用大写,要是用的合理又合法。 如果你写成了这样:
int _____=10;
谁能分得清你的变量名到底有几个下划线。
生命周期:在程序/当前函数运行完 变量的内存就会让系统自动回收。
那么,在C语言运行的时候变量到底储存在内存的什么地方呢?首先我们需要知道,内存被分为栈(stack)和堆(heap)。变量是储存在栈上的,就像这样
根据代码的执行顺序,变量a首先被压入栈中,然后是变量b。出栈时,是b先出栈,然后是a,即先进后出。变量在程序执行完毕后会自动释放掉存储单元。
内存中栈有多大?而堆又有多大?
栈对于不同的机器都不相同,大约1M-2M。
堆原则上是没限制的,你的硬件有多大的存储空间就可以分配相迎大小的堆,另外定义在堆中的需要程序员手动回收。
当你定义一个汉字为变量的时候,往往输出结果是问号“?”,例如
int main()
{ char ch = '高';
printf("%c\n",ch);
return 0;
}
这又是为什么呢?这是因为char类型只占1个字节,而根据计算机编译器的不同,所采用的字符集编码方案也有所不同,有的是占2个字节,有的是占3个字节。这就超出了char型所能占用的最大字节数,所以就会生成一个预料不到的字符。
在程序运行过程中,其值不能被改变的量成为常量。
const修饰的变量叫做常变量。例如:
const int b=20;
在这里需要注意的是,常变量是需要初始化,如果没有初始化,在编译时系统会报错。例如:
const int b; 或 const int b;
b = 20;
常变量与常量的异同:常变量具有变量的基本属性:有类型,占存储单元,只是不允许改变其值。
在定义常变量的时候要,一定要进行初始化。
#define:宏定义。写在main()函数之前,代替函数中出现相同变量名。如:
#define SIZE 10
int main()
{
int high = SIZE;
printf("%d\n",high);
return 0;
}
其中的SIZE赋值为10,在函数中出现的所有SIZE都代表10,这样在代码较多的时候便于修改。
注:通常情况下宏定义使用大写字母。
预编译:宏替换,注释的替换(变为空格),头文件的引入
1.():函数,提升优先级,强制类型转换
2.[]:数组存放在栈中,上面是0,下面是4(先进先出)。与正常放数相反(先进后出)
3.!逻辑非:负数也表示真,只有0表示假
4.~:按位取反
5.>>:按位右移 右移相当于除法
6.<<:按位左移 左移相当于乘法
注:计算机中移位操作比乘法快。
7.^:按位异或
8.&:按位与
9.|:按位或
11.++a,--a:先计算,再赋值
int main()
{ int i=1;
int i2=0;
int i3=2;
if(i++||i2++||i3++)
{
printf("it's true\n");
}
else
{
printf("it's fall\n");
}
printf("%d%d%d\n",i,i2,i3);
return 0;
}
运行结果为:202。在if语句中,i++已为真,后面的语句就不再执行。
12. *:1.定义指针 2.解引用 3.乘号
int main()
{ int a=10;
int* p=&a;//*:代表指针
*p=100;//间接访问符==》解引用 一个*,“往上跳一步”
printf("%d\n",a);
printf("%d\n",*p);
return 0;
}
13.sizeof:长度运算符。现有如下例题:
int main()
{ int a=10;
printf("%d\n",sizeof(a));
printf("%d\n",sizeof a);
printf("%d\n",sizeof(int));
int* p=&a;
char* p2=(char*)&a;
printf("%d\n",sizeof(p));
printf("%d\n",sizeof(p2));//所有的指针,不管什么类型全部为4个字节
printf("======================");
printf("%d\n",sizeof(++a));
printf("%d\n",a);//10,编译期间只参与确认返回值的类型并不会参与运算
printf("%d\n",sizeof(3+4.5));//8,会变成double类型
return 0;
}
注:sizeof()在编译期间只参与确认返回值类型,并不会参与计算。所有的指针,不管什么类型全部为4个字节。
14. /:除法运算符。用来计算两个数相除。现有如下例题:
int main()
{ float f1=5/2;
float f2=(float)5/2;
float f3=(float)(5/2);
float f4=5/(float)2;
printf("%f\n",f1);
printf("%f\n",f2);
printf("%f\n",f3);
printf("%f\n",f4);
return 0;
}
15.%:求余运算符。现有如下例题:
int main()
{
printf("%d\n",10%3);
printf("%d\n",-10%3);
printf("%d\n",-10%-3);
printf("%d\n",10%-3);
return 0;
}
注:在计算时,一定要看清楚正负号,再进行计算。
16. ?:条件运算符(三目运算符)。
条件运算符的一般形式为:表达式1?表达式2:表达式3
条件运算符的执行顺序:先求解表达式1,若为真则求解表达式2,此时表达式2的值就作为整个条件表达式的值。若表达式1的值为假,则求解表达式3,表达式3的值就是整个条件表达式的值。例如:
int main()
{
int a=10;
int b=20;
int max;
max=(a>b)?a:b;
printf("%d\n",max);
return 0;
}
在C语言代码编写完毕之后,要掌握如何使用编译软件去进行调试。调试一般分为两个步骤:1.打断点。2.调试,逐过程 ,逐语句。使用VS2012进行调试时,可通过监视框来进行逐过程,逐语句的调试。这也是成为一名优质程序员的必备技能。