变量&字符串

本文详细阐述了全局变量与局部变量的区别,包括作用域、内存存储方式、生命周期及使用方式的不同,并介绍了静态变量的特点。此外,还提供了字符串操作函数如strcpy、stoi、itoa和memcpy的实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

变量

全局变量和静态变量的异同

相同点:都保留在静态存储区,生命期与程序生命期相同。

不同点:全局变量具有全局作用域,静态变量具有稳健作用域。

把局部变量改为静态变量后是改变了它的存储方式,即改变了它的生存期;把全局变量改变为静态变量后是改变了它的作用域,限制了它的适用范围。

 

全局变量和局部变量的区别

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


 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值