大魔王程序员生成记#02#C语言基础——变量与常量

变量:

       变量代表一个具有名字的,具有特定属性的一个存储单元。它用来存放数据,也就是存放变量的值。在程序的运行期间,变量的值是可以改变的。

变量的作用范围:在花括号之间。

int main()
{
	int a = 10;
	int b = 20;
	int c = 30;
	return 0;
}

定义变量:字母,数字,下划线,但不能用数字开头。

注意:变量由小写组成,尽量不要用大写,要是用的合理又合法。 如果你写成了这样:

int _____=10;

谁能分得清你的变量名到底有几个下划线。

生命周期:在程序/当前函数运行完  变量的内存就会让系统自动回收。

       那么,在C语言运行的时候变量到底储存在内存的什么地方呢?首先我们需要知道,内存被分为栈(stack)和堆(heap)。变量是储存在栈上的,就像这样

大魔王程序员生成记#02#C语言基础——变量与常量_第1张图片

根据代码的执行顺序,变量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.<<:按位左移   左移相当于乘法  

大魔王程序员生成记#02#C语言基础——变量与常量_第2张图片

注:计算机中移位操作比乘法快。

7.^:按位异或

8.&:按位与

9.|:按位或

大魔王程序员生成记#02#C语言基础——变量与常量_第3张图片

大魔王程序员生成记#02#C语言基础——变量与常量_第4张图片
10.a++,a--:先赋值,再计算

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;
}

大魔王程序员生成记#02#C语言基础——变量与常量_第5张图片

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;
}

运行结果为:大魔王程序员生成记#02#C语言基础——变量与常量_第6张图片

注: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;
}

运行结果为:大魔王程序员生成记#02#C语言基础——变量与常量_第7张图片

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;
}

运算结果为:大魔王程序员生成记#02#C语言基础——变量与常量_第8张图片

注:在计算时,一定要看清楚正负号,再进行计算。

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进行调试时,可通过监视框来进行逐过程,逐语句的调试。这也是成为一名优质程序员的必备技能。

 

 

你可能感兴趣的:(C,C)