}
2.2.变量的生存期
●全局变量在程序的整个运行期间均有效。
●函数内的普通局部变量在函数调用期间有效。
(重点讲解)
●函数内的静态局部变量在程序的整个运行期间有效。
●堆内分配的变量的生命期从创建变量开始(new、malloc()、strdup(),HeapAlloc()),一直到变量释放(delete、free()、HeapFree())。
(重点讲解)
int**ppi;
ppi=newint*[2];
ppi[0]=newint[3];
ppi[1]=newint[10];
//ppi[0][0]=3;
//...
delete[](ppi[0]);
delete[](ppi[1]);
delete[]ppi;
//如果要把{"ab","cdef"}赋值给char**ppsz呢
3.练习题
1、写一个可变参数个数的函数,输入N个整数,返回N个整数之和。
2、写一函数IsDigit,判断输入的字符是否是数字字符。
3、写一函数将char型数组转换成两个16进制字符输出,如’a’--‘6’,’1’
4、写一函数将char型数组转换成16进制字符串输出,如’a’--“61”
5、输入一个1-7的数,输出对应的星期几的英文字符串。
如1--“MONDAY”
6、字符串处理函数:
//*******************************************************************
//功能:
获取字符串的长度
//输入:
pszParam--字符指针(字符串)
//输出:
无
//返回:
pszParam字符串的长度
//*******************************************************************
intStrLen(constchar*pszParam);
//*******************************************************************
//功能:
字符串拷贝
//输入:
pszDst--目标字符串指针
//pszSrc--源字符串指针
//输出:
无
//返回:
目标字符串指针
//*******************************************************************
char*StrCpy(char*pszDst,constchar*pszSrc);
//*******************************************************************
//功能:
在源字符串中找子字符串,并返回子字符串在源字符串首次出现处
//的指针
//输入:
pszSrc--源字符串
//pszSub--子字符串
//输出:
无
//返回:
子字符串在源字符串首次出现处的指针,如果未找到,返回NULL
//*******************************************************************
char*FindStr(constchar*pszSrc,constchar*pszSub);
//*******************************************************************
//功能:
从控制台读入一字符串到pszParam中,pszParam最多能存放
//iMaxStrLen个字符。
根据控制台的换行符号和iMaxStrLen判断输入结
//束,回车和换行符号不包含在pszParam中
//输入:
pszParam--目标缓冲区,存放输入的字符。
//iMaxStrLen--pszParam最多能存放的字符数。
//输出:
无
//返回:
pszParam字符串指针
//*******************************************************************
char*ReadStr(char*pszParam,intiMaxStrLen);
//*******************************************************************
//功能:
从控制台读入iStrCount个字符串,每个字符串最长为iMaxStrlen,
//最后用指针的指针的方式将这组字符串返回。
//输入:
iStrCount--要求输入的字符串数量
//iMaxStrLen--每个字符串的最大长度。
//输出:
无
//返回:
指向这组字符串的指针。
//*******************************************************************
char**ReadStrs(intiStrCount,intiMaxStrLen);
//*******************************************************************
//功能:
释放字符串指针以及所指向的所有字符串的内存
//输入:
ppszParam--字符指针的指针(字符串指针)
//iStrCount--字符串个数
//输出:
无
//返回:
无
//*******************************************************************
voidFreeStrs(char**ppszParam,intiStrCount);
7、写一函数,输入一文件名,读取文件中的数据,并转换成16进制的字符串输出。
8、写一函数,输入一文件夹名,打印出该文件夹下的所有文件名和所有子文件夹名。
9、写一函数,输入一文件夹名,将文件夹下的所有文件名以一个字符指针的指针的形式返回。
10、写一函数,输入一文件夹名,按层次递规输出所有文件名和子文件夹名。
11、请计算sizeof的值
charstr[]=“Hello”;
char*p=str;
intn=10;
请计算
sizeof(str)=
sizeof(p)=
sizeof(n)=
voidFunc(charstr[100])
{
请计算
sizeof(str)=
}
void*p=malloc(100);
请计算
sizeof(p)=
12、
voidGetMemory(char*p)
{
p=(char*)malloc(100);
}
voidTest(void)
{
char*str=NULL;
GetMemory(str);
strcpy(str,"helloworld");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:
char*GetMemory(void)
{
charp[]="helloworld";
returnp;
}
voidTest(void)
{
char*str=NULL;
str=GetMemory();
printf(str);
}
请问运行Test函数会有什么样的结果?
答:
VoidGetMemory2(char**p,intnum)
{
*p=(char*)malloc(num);
}
voidTest(void)
{
char*str=NULL;
GetMemory(&str,100);
strcpy(str,"hello");
printf(str);
}
请问运行Test函数会有什么样的结果?
答:
voidTest(void)
{
char*str=(char*)malloc(100);
strcpy(str,“hello”);
free(str);
if(str!
=NULL)
{
strcpy(str,“world”);
printf(str);
}
}
请问运行Test函数会有什么样的结果?
答: