变量的存储类别
变量值存储时间)动态存储方式,在程序运行期间进行分动态的分配存储空间的方式,静态存储方式是指在程序运行期间分配固定的存储空间的方式;存储空间分为程序区、静态存储区和动态存储区;全局变量全部放在静态存储区中,程序开始时分配空间,完毕时释放;动态存储区中存放以下数据:
1、函数形式参数;
2、自动变量;
3、函数调用时的现场保护和返回地址;在C语言中每个变量和函数都有两个属性,是数据类型和数据存储类型,存储类别是数据在内存中存储的方式。
表达式 *++ptr 和 ++*ptr 是否相同
这两种表达方式不同。下面来看一个示例代码来了解这两个表达式之间的区别。
示例1:
#include<stdio.h>intmain(void){int aiData[5]={100,200,30,40,50};int*piData = aiData;++*piData;printf("aiData[0] = %d, aiData[1] = %d, *piData = %d", aiData[0], aiData[1],*piData);return0;}C
输出:
101 , 200 , 101
解释:
在上面的示例中,涉及两个运算符,并且都具有相同的优先级,具有从右到左的关联性。所以上面的表达式 ++*p 等价于 ++ (*p)。 换句话说,它是值的预增量,输出是 101、200、101。
示例2:
#include<stdio.h>intmain(void){int aiData[5]={100,200,30,40,50};int*piData = aiData;*++piData;printf("aiData[0] = %d, aiData[1] = %d, *piData = %d", aiData[0], aiData[1],*piData);return0;}C
输出:
100、200、200
Shell
解释:
在上面的示例中,涉及两个运算符,并且它们具有相同的从右到左关联性的优先级。所以上面的表达式 *++p 等价于 *(++p)。 换句话说,它是地址的预增量,输出是 100, 200,200。
形参与实参
形参:形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数;
实参:实参是在调用时传递该函数的参数。
函数的形参和实参具有以下特点:
形参只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。
实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值等办法使实参获得确定值。
在参数传递时,实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。
局部变量和全局变量:
(一)局部变量在一个函数内部定义的变量是内部变量,它只是在本函数范围内的有效,主函数也不能使用其它函数中定义的变量;不同函数中可以使用相同的名字的变量,他们代表不同的对象,互不干扰;形式参数也是局部变量;在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效,这种复合句也可以称为“分程序”或“程序块”;
(二)全局变量,在函数之外定义的变量称为外部变量,全局变量可以增加函数间数据联系的渠道,一般不再必要时不要使用,他在程序的全部执行过程中占用存储单元,是函数的通用性,使用全局变量会使程序的清晰性降低。还要注意若果同一源文件中,外部变量和局部变量同名,则在局部变量作用范围内,外部变量被“屏蔽”,不起任何作用。