变量
全局变量和静态变量的异同
相同点:都保留在静态存储区,生命期与程序生命期相同。
不同点:全局变量具有全局作用域,静态变量具有稳健作用域。
把局部变量改为静态变量后是改变了它的存储方式,即改变了它的生存期;把全局变量改变为静态变量后是改变了它的作用域,限制了它的适用范围。
全局变量和局部变量的区别
1)全局变量的作用域为这个程序块,而局部变量的作用域为当前函数;
2)内存存储方式不同,全局变量分配在全局数据区,后者分配在栈区;
3)生命周期不同。全局变量随主程序创建而创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在了;
4)使用方式不同。通过声明后全局变量程序的各个部分都可以用到,局部变量只能在局部使用。
字符串
自行实现strcpy()函数
char * strcpy(char *strDest,const char *strSrc)
{
assert((strDest != NULL) && (strSrc != NULL));
if(strDest == strSrc)
{
return strDest;
}
char *address = strDest;
while((*strDest++ = *strSrc++) != ‘\0’);
return address;
}
自行实现stoi()和itoa()函数
int Myatoi(char *str)
{
if(str == NULL)
{
printf(“Invalid Input!\n”);
return -1;
}
while(*str == ‘’)
{
str++;
}
while((*str == (char)0xA1) && (*(str+1) == (char)0xA1))
{
str += 2;
}
int nSign = (*str == ‘-’) ? -1:1;
if(*str == ‘+’|| *str == ‘-’)
{
str++;
}
int nResult = 0;
while(*str >= ‘0’ && *str <= ‘9’)
{
nResult = nResult * 10 + (str - ‘0’);
str++;
}
return nResult * nSign;
}
char* Myitoa(int num)
{
char str[1024];
int sign = num,i = 0,j = 0;
char temp[11];
if(sign < 0)
{
num -= num;
}
do
{
temp[i] = num %10 + ‘0’;
num /= 10;
i++;
}while(num > 0);
if(sign < 0)
{
temp[i++] = ‘-’;
}
temp[i] = ‘\0’;
i--;
while(i >= 0)
{
str[i] = temp[i];
j++;
i--;
}
str[j] = ‘\0’;
return str;
}
自行实现memcpy()函数
与strcpy相比,memcpy遇到‘\0’不结束,而是一定会复制完n个字节。而且目标数据dest本身已有数据,执行memcpy()后,将覆盖原有数据(最多覆盖n)。如果追加数据,则每次执行memcpy后,要将目标数组地址增加到要追加数据的地址。
void* MyMemcpy(void *dest,const void *src,size_t count)
{
char* pdest = static_cast<char *>(dest);
const char* psrc = static_cast<const char*>(src);
if((pdest > psrc) && (pdest < (psrc + count)))
{
for(size_t i = count -1; i != -1;--i)
{
pdest[i] = psrc[i];
}
}
else
{
for(size_t i = 0; i < count; ++i)
{
pdest[i] = psrc[i];
}
}
return dest;
}