變量&字符串

變量

全局變量和靜態變量的異同

相同點:都保留在靜態存儲區,生命期與程序生命期相同。

不同點:全局變量具有全局作用域,靜態變量具有穩健作用域。

把局部變量改爲靜態變量後是改變了它的存儲方式,即改變了它的生存期;把全局變量改變爲靜態變量後是改變了它的作用域,限制了它的適用範圍。

 

全局變量和局部變量的區別

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


 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章