while (p[i].nNumb > 0 && i < _countof(g_data))
{
i;
//if (p[i].nNumb <= 0)
// break; //定位空闲位
}
大于零则进入循环等价于小于等于跳出循环
64位下,变量内存位置情况
#include <stdio.h>
int power(int i)//0x00007FF6A1CB1B70
{
i++;//0x000000b13ef2fbf0
return i;//
}
int main()//0x00007FF6A1CB2AD0 函数地址
{
int x = 1;//0x000000B13EF2FC14
int y = 2;//0x000000B13EF2FC34
int z = 15;//0x000000B13EF2FC54
int n = power(z);//0x000000B13EF2FC74
return 0;
}
在程序进入main函数之前全局变量已经的初始化完毕,在程序离开main函数之后仍然保持数值不丢失。换句话说就是:全局变量的生命期很大,比main函数的生命期还长。
局部变量占用的内存区域是栈区,全局变量占用的内存区域是全局区(也叫静态区),两种内存区域一般在地址上相距甚远。
c、c++中只能包含头文件,头文件只能放声明不能函数定义、全局变量定义。
一个全局变量的定义在整个软件工程只能有一份,全局变量的声明可以有多份。Link error链接式错误 和 编译时错误,
函数出入栈
#include<stdio.h>
int power(int nNumb, int nPow)//0x00000041E676F960 0x00000041E676F968
{
int nRes = 1;//0x00000041E676F864
printf("power:\tnNumb->0x%p{%d} nPow->0x%p{%d} nRes->0x%p{%d}\n",
&nNumb, nNumb, &nPow, nPow, &nRes, nRes);
while (nPow--)
nRes *= nNumb;
return nRes;
}
void display(int nNumb, int nPow)
{
int n = 0;
printf("display:nNumb->0x%p{%d} nPow->0x%p{%d} n->0x%p{%d}\n",
&nNumb, nNumb, &nPow, nPow, &n, n);
n = power(nNumb, nPow);
printf("%d的%d次方是:%d\n", nNumb, nPow, n);
}
int main()//0x00007FF6EE0D1AC0
{
int n = power(3, 4);//0x00000041E676F984
display(2, 5);
n = power(7, 2);
printf("main:\tn->0x%p{%d}\n", &n, n);
return 0;
}
1、请列出static关键字有哪些作用?
C语言有两种:修饰全局变量(函数)和修饰局部变量。
C++还有两种:修饰成员变量和成员函数。
面试题:在C语言中,static关键字的作用有哪些?
a)在一个函数前加上static关键字修饰之后,这个函数将禁止被跨文件访问,只限于在当前源文件中使用;
b)在一个全局变量的定义前加上 static修饰之后,这个全局变量也将被禁止跨文件访问,只限于在当前源文件中使用;
c)如果一个全局变量或函数不加static修饰时,在整个软件工程中只能有一份同名的全局变量或函数,否则在编译时将出现连接错误;
d)如果一个全局变量或函数加了static修饰之后,每一个源文件中都可以有一份同名的全局变量或函数,而编译时不会出现(同名冲突的)连接错误;
e)如果在一个函数内的局部变量前加上static修饰之后,这个变量已经不是纯粹的局部变量了。编译之后它与全局变量处于同一空间内,这个函数内的静态变量的生命期与全局变量相同,变量在程序进入main函数之前已经初始化完毕。
在C++语言中,static还有另外两个功能,就是修饰成员变量与成员函数。
变量处于同一空间内,这个函数内的静态变量的生命期与全局变量相同,变量在程序进入main函数之前已经初始化完毕。
在C++语言中,static还有另外两个功能,就是修饰成员变量与成员函数。