溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

c語言基本函數(shù)

發(fā)布時間:2020-07-28 17:25:17 來源:網(wǎng)絡(luò) 閱讀:1025 作者:ye小灰灰 欄目:編程語言



一.內(nèi)存操作函數(shù):

(1)

頭文件:#include <string.h>
memset() 函數(shù)用來將指定內(nèi)存的前n個字節(jié)設(shè)置為特定的值,其原型為:
    void * memset( void * ptr, int value, size_t num );
參數(shù)說明:

  • ptr 為要操作的內(nèi)存的指針。

  • value 為要設(shè)置的值。你既可以向 value 傳遞 int 類型的值,也可以傳遞 char 類型的值,int 和 char 可以根據(jù) ASCII 碼相互轉(zhuǎn)換。

  • num 為 ptr 的前 num 個字節(jié),size_t 就是unsigned int。

【函數(shù)說明】memset() 會將 ptr 所指的內(nèi)存區(qū)域的前 num 個字節(jié)的值都設(shè)置為 value,然后返回指向 ptr 的指針。

【返回值】返回指向 ptr 的指針。



(2)

頭文件:#include <string.h>
memcpy() 用來復(fù)制內(nèi)存,其原型為:
    void * memcpy ( void * dest, const void * src, size_t num );
memcpy() 會復(fù)制 src 所指的內(nèi)存內(nèi)容的前 num 個字節(jié)到 dest 所指的內(nèi)存地址上。
memcpy() 并不關(guān)心被復(fù)制的數(shù)據(jù)類型,只是逐字節(jié)地進行復(fù)制,這給函數(shù)的使用帶來了很大的靈活性,可以面向任何數(shù)據(jù)類型進行復(fù)制。
需要注意的是:

  • dest 指針要分配足夠的空間,也即大于等于 num 字節(jié)的空間。如果沒有分配空間,會出現(xiàn)斷錯誤。

  • dest 和 src 所指的內(nèi)存空間不能重疊(如果發(fā)生了重疊,使用 memmove() 會更加安全)。

與 strcpy() 不同的是,memcpy() 會完整的復(fù)制 num 個字節(jié),不會因為遇到“\0”而結(jié)束。
【返回值】返回指向 dest 的指針。注意返回的指針類型是 void,使用時一般要進行強制類型轉(zhuǎn)換。



(3)

頭文件:#include <string.h>
定義函數(shù):int memcmp (const void *s1, const void *s2, size_t n);
函數(shù)說明:memcmp()用來比較s1 和s2 所指的內(nèi)存區(qū)間前n 個字符。
字符串大小的比較是以ASCII 碼表上的順序來決定,次順序亦為字符的值。memcmp()首先將s1 第一個字符值減去s2 第一個字符的值,若差為0 則再繼續(xù)比較下個字符,若差值不為0 則將差值返回。例如,字符串"Ac"和"ba"比較則會返回字符'A'(65)和'b'(98)的差值(-33)。
返回值:若參數(shù)s1 和s2 所指的內(nèi)存內(nèi)容都完全相同則返回0 值。s1 若大于s2 則返回大于0 的值。s1 若小于s2 則返回小于0 的值。



(4)

頭文件:#include <string.h>
定義函數(shù):void * memccpy(void *dest, const void * src, int c, size_t n);
函數(shù)說明:memccpy()用來拷貝src 所指的內(nèi)存內(nèi)容前n 個字節(jié)到dest 所指的地址上。與memcpy()不同的是,memccpy()會在復(fù)制時檢查參數(shù)c 是否出現(xiàn),若是則返回dest 中值為c 的下一個字節(jié)地址。
返回值:返回指向dest 中值為c 的下一個字節(jié)指針。返回值為0 表示在src 所指內(nèi)存前n 個字節(jié)中沒有值為c的字節(jié)。



(5)

頭文件:#include <stdlib.h>
malloc() 函數(shù)用來動態(tài)地分配內(nèi)存空間(如果你不了解動態(tài)內(nèi)存分配,請查看:C語言動態(tài)內(nèi)存分配及變量存儲類別),其原型為:
void* malloc (size_t size);
【參數(shù)說明】size 為需要分配的內(nèi)存空間的大小,以字節(jié)(Byte)計。
【函數(shù)說明】malloc() 在堆區(qū)分配一塊指定大小的內(nèi)存空間,用來存放數(shù)據(jù)。這塊內(nèi)存空間在函數(shù)執(zhí)行完成后不會被初始化,它們的值是未知的。如果希望在分配內(nèi)存的同時進行初始化,請使用 calloc() 函數(shù)。
【返回值】分配成功返回指向該內(nèi)存的地址,失敗則返回 NULL。
由于申請內(nèi)存空間時可能有也可能沒有,所以需要自行判斷是否申請成功,再進行后續(xù)操作。



(6)

頭文件:#include <stdlib.h>
calloc() 函數(shù)用來動態(tài)地分配內(nèi)存空間并初始化為 0,其原型為:
    void* calloc (size_t num, size_t size);
calloc() 在內(nèi)存中動態(tài)地分配 num 個長度為 size 的連續(xù)空間,并將每一個字節(jié)都初始化為 0。所以它的結(jié)果是分配了 num*size 個字節(jié)長度的內(nèi)存空間,并且每個字節(jié)的值都是0。
【返回值】分配成功返回指向該內(nèi)存的地址,失敗則返回 NULL。



(7)

頭文件:#include <stdlib.h>
calloc() 函數(shù)是給一個已經(jīng)分配了地址的指針重新分配空間,參數(shù)ptr為原有的空間地址,newsize是重新申請的地址長度。其原型為:

   void*  realloc(void * ptr, unsigned newsize)

realloc函數(shù)將ptr的內(nèi)存大小增加到newsize。

返回值:分配成功返回指向該內(nèi)存的地址,失敗則返回 NULL。



(8)

頭文件:#include <stdlib.h>
free() 函數(shù)用來釋放動態(tài)分配的內(nèi)存空間,其原型為:
    void free (void* ptr);
free() 可以釋放由 malloc()calloc()、realloc() 分配的內(nèi)存空間,以便其他程序再次使用。
【參數(shù)說明】ptr 為將要釋放的內(nèi)存空間的地址。
free() 只能釋放動態(tài)分配的內(nèi)存空間,并不能釋放任意的內(nèi)存。下面的寫法是錯誤的:

int a[10];// ...free(a);

如果 ptr 所指向的內(nèi)存空間不是由上面的三個函數(shù)所分配的,或者已被釋放,那么調(diào)用 free() 會有無法預(yù)知的情況發(fā)生。
如果 ptr 為 NULL,那么 free() 不會有任何作用。
注意:free() 不會改變 ptr 變量本身的值,調(diào)用 free() 后它仍然會指向相同的內(nèi)存空間,但是此時該內(nèi)存已無效,不能被使用。所以建議將 ptr 的值設(shè)置為 NULL,例如:

free(ptr);ptr = NULL;



(9)

頭文件:#include <string.h>
定義函數(shù):void * memchr(const void *s, char c, size_t n);
函數(shù)說明:memchr()從頭開始搜尋s 所指的內(nèi)存內(nèi)容前n 個字節(jié),直到發(fā)現(xiàn)第一個值為c 的字節(jié),則返回指向該字節(jié)的指針。
返回值:如果找到指定的字節(jié)則返回該字節(jié)的指針,否則返回0。



(10)

頭文件:#include <string.h>
memmove() 用來復(fù)制內(nèi)存內(nèi)容,其原型為:
    void * memmove(void *dest, const void *src, size_t num);
memmove() 與 memcpy() 類似都是用來復(fù)制 src 所指的內(nèi)存內(nèi)容前 num 個字節(jié)到 dest 所指的地址上。不同的是,memmove() 更為靈活,當(dāng)src 和 dest 所指的內(nèi)存區(qū)域重疊時,memmove() 仍然可以正確的處理,不過執(zhí)行效率上會比使用 memcpy() 略慢些。src和dst所指內(nèi)存區(qū)域如果重疊,復(fù)制后src的內(nèi)容會被更改。

memmove代碼實現(xiàn):

void * my_memmove(void * dst,const void * src,int count)
{
   void * ret = dst;
   if (dst <= src || (char *)dst >= ((char *)src + count))
   {
      while (count--)
      {
        *(char *)dst = *(char *)src;
            dst = (char *)dst + 1;
            src = (char *)src + 1;
        }
   }
   else
   {
      dst = (char *)dst + count - 1;
      src = (char *)src + count - 1;
      while (count--)
      {
        *(char *)dst = *(char *)src;
        dst = (char *)dst - 1;
        src = (char *)src - 1;
      }
   }
   return(ret);
}
int main()
{
   char a[12];
   puts((char *)my_memmove(a,"ammana_babi",16));
   system("pause");
   return 0;
}


(11)

頭文件:#include <unistd.h>    #include <sys/mman.h>
定義函數(shù):void *mmap(void *start, size_t length, int prot, int flags, int fd, off_t offsize);
函數(shù)說明:mmap()用來將某個文件內(nèi)容映射到內(nèi)存中,對該內(nèi)存區(qū)域的存取即是直接對該文件內(nèi)容的讀寫。

c語言基本函數(shù)返回值:若映射成功則返回映射區(qū)的內(nèi)存起始地址,否則返回MAP_FAILED(-1),錯誤原因存于errno 中。
錯誤代碼:

  • EBADF  參數(shù)fd 不是有效的文件描述詞。

  • EACCES  存取權(quán)限有誤。如果是MAP_PRIVATE 情況下文件必須可讀,使用MAP_SHARED 則要有PROT_WRITE 以及該文件要能寫入。

  • EINVAL  參數(shù)start、length 或offset 有一個不合法。

  • EAGAIN  文件被鎖住,或是有太多內(nèi)存被鎖住。

  • ENOMEM  內(nèi)存不足。



(12)

頭文件:#include <unistd.h>       #include <sys/mman.h>
定義函數(shù):int munmap(void *start, size_t length);
函數(shù)說明:munmap()用來取消參數(shù)start 所指的映射內(nèi)存起始地址,參數(shù)length 則是欲取消的內(nèi)存大小。當(dāng)進程結(jié)束或利用exec 相關(guān)函數(shù)來執(zhí)行其他程序時,映射內(nèi)存會自動解除,但關(guān)閉對應(yīng)的文件描述詞時不會解除映射。
返回值:如果解除映射成功則返回0,否則返回-1。錯誤原因存于errno 中錯誤代碼EINVAL參數(shù) start 或length 不合法。



(13)

頭文件:#include <unistd.h>
定義函數(shù):size_t getpagesize(void);
函數(shù)說明:返回一分頁的大小,單位為字節(jié)(byte)。此為系統(tǒng)的分頁大小,不一定會和硬件分頁大小相同。
返回值:內(nèi)存分頁大小。
附加說明:在 Intel x86 上其返回值應(yīng)為4096bytes。




二.字符串操作函數(shù):

(1)

頭文件:#include <string.h>
strlen()函數(shù)用來計算字符串的長度,其原型為:
    unsigned int strlen (char *s);
【參數(shù)說明】s為指定的字符串。
strlen()用來計算指定的字符串s 的長度,不包括結(jié)束字符"\0"。
【返回值】返回字符串s 的字符數(shù)。
注意一下字符數(shù)組,例如
    char str[100] = "http://see.xidian.edu.cn/cpp/u/biaozhunku/";
定義了一個大小為100的字符數(shù)組,但是僅有開始的11個字符被初始化了,剩下的都是0,所以 sizeof(str) 等于100,strlen(str) 等于11。
如果字符的個數(shù)等于字符數(shù)組的大小,那么strlen()的返回值就無法確定了,例如
    char str[6] = "abcxyz";
strlen(str)的返回值將是不確定的。因為str的結(jié)尾不是0,strlen()會繼續(xù)向后檢索,直到遇到'\0',而這些區(qū)域的內(nèi)容是不確定的。
注意:strlen() 函數(shù)計算的是字符串的實際長度,遇到第一個'\0'結(jié)束。如果你只定義沒有給它賦初值,這個結(jié)果是不定的,它會從首地址一直找下去,直到遇到'\0'停止。而sizeof返回的是變量聲明后所占的內(nèi)存數(shù),不是實際長度,此外sizeof不是函數(shù),僅僅是一個操作符,strlen()是函數(shù)。



(2)

頭文件:#include <string.h>
定義函數(shù):char *strcpy(char *dest, const char *src);
函數(shù)說明:strcpy()會將參數(shù)src 字符串拷貝至參數(shù)dest 所指的地址。
返回值:返回參數(shù)dest 的字符串起始地址。
附加說明:如果參數(shù) dest 所指的內(nèi)存空間不夠大,可能會造成緩沖溢出(buffer Overflow)的錯誤情況,在編寫程序時請?zhí)貏e留意,或者用strncpy()來取代。



(3)

頭文件:#include <string.h>
strcmp() 用來比較字符串(區(qū)分大小寫),其原型為:
    int strcmp(const char *s1, const char *s2);
【參數(shù)】s1, s2 為需要比較的兩個字符串。
字符串大小的比較是以ASCII 碼表上的順序來決定,此順序亦為字符的值。strcmp()首先將s1 第一個字符值減去s2 第一個字符值,若差值為0 則再繼續(xù)比較下個字符,若差值不為0 則將差值返回。例如字符串"Ac"和"ba"比較則會返回字符"A"(65)和'b'(98)的差值(-33)。
【返回值】若參數(shù)s1 和s2 字符串相同則返回0。s1 若大于s2 則返回大于0 的值。s1 若小于s2 則返回小于0 的值。
注意:strcmp() 以二進制的方式進行比較,不會考慮多字節(jié)或?qū)捵止?jié)字符;如果考慮到本地化的需求,請使用 strcoll() 函數(shù)。



(4)

頭文件:#include <string.h>
strcoll() 函數(shù)根據(jù)環(huán)境變量LC_COLLATE來比較字符串,其原型為:
    int strcoll( const char * str1, const char * str2 );
【參數(shù)說明】str1、str2 是要進行比較的兩個字符串。
函數(shù)說明:strcoll() 會依環(huán)境變量 LC_COLLATE 所指定的文字排列次序來比較 s1 和 s2 字符串。
默認情況下,LC_COLLATE 為"POSIX"或"C",strcoll() 和 strcmp() 一樣根據(jù)ASCII比較字符串大小。
對于設(shè)置了 LC_COLLATE 語言環(huán)境的情況下,則根據(jù) LC_COLLATE 設(shè)置的語言排序方式進行比較。例如,漢字會根據(jù)拼音進行比較。
【返回值】若字符串 str1 和 str2 相同則返回0。若 str1 大于 str2 則返回大于 0 的值,否則返回小于 0 的值。



(5)

頭文件:#include <string.h>
strcat() 函數(shù)用來連接字符串,其原型為:
    char *strcat(char *dest, const char *src);
【參數(shù)】dest 為目的字符串指針,src 為源字符串指針。
strcat() 會將參數(shù) src 字符串復(fù)制到參數(shù) dest 所指的字符串尾部;dest 最后的結(jié)束字符 NULL 會被覆蓋掉,并在連接后的字符串的尾部再增加一個 NULL。
注意:dest 與 src 所指的內(nèi)存空間不能重疊,且 dest 要有足夠的空間來容納要復(fù)制的字符串。
【返回值】返回dest 字符串起始地址。



(6)

頭文件:#include <string.h>
strncpy()用來復(fù)制字符串的前n個字符,其原型為:
    char * strncpy(char *dest, const char *src, size_t n);
【參數(shù)說明】dest 為目標(biāo)字符串指針,src 為源字符串指針。
strncpy()會將字符串src前n個字符拷貝到字符串dest。
不像strcpy(),strncpy()不會向dest追加結(jié)束標(biāo)記'\0',這就引發(fā)了很多不合常理的問題,將在下面的示例中說明。
注意:src 和 dest 所指的內(nèi)存區(qū)域不能重疊,且 dest 必須有足夠的空間放置n個字符。
【返回值】返回字符串dest。



(7)

頭文件:#inclue <string.h>
strncat()用于將n個字符追加到字符串的結(jié)尾,其原型為:
    char * strncat(char *dest, const char *src, size_t n);
【參數(shù)說明】dest為目標(biāo)字符串,src為源字符串,n為要追加的字符的數(shù)目。
strncat()將會從字符串src的開頭拷貝n 個字符到dest字符串尾部,dest要有足夠的空間來容納要拷貝的字符串。如果n大于字符串src的長度,那么僅將src全部追加到dest的尾部。
strncat()會將dest字符串最后的'\0'覆蓋掉,字符追加完成后,再追加'\0'。
【返回值】返回字符串dest。



(8)

頭文件:#include <string.h>
strstr()函數(shù)用來檢索子串在字符串中首次出現(xiàn)的位置,其原型為:
    char *strstr( char *str, char * substr );
【參數(shù)說明】str為要檢索的字符串,substr為要檢索的子串。
【返回值】返回字符串str中第一次出現(xiàn)子串substr的地址;如果沒有檢索到子串,則返回NULL。



(9)

頭文件:#include <string.h>
strchr() 用來查找某字符在字符串中首次出現(xiàn)的位置,其原型為:
    char * strchr (const char *str, int c);
【參數(shù)】str 為要查找的字符串,c 為要查找的字符。
strchr() 將會找出 str 字符串中第一次出現(xiàn)的字符 c 的地址,然后將該地址返回。
注意:字符串 str 的結(jié)束標(biāo)志 NUL 也會被納入檢索范圍,所以 str 的組后一個字符也可以被定位。
【返回值】如果找到指定的字符則返回該字符所在地址,否則返回 NULL。
返回的地址是字符串在內(nèi)存中隨機分配的地址再加上你所搜索的字符在字符串位置。設(shè)字符在字符串中首次出現(xiàn)的位置為 i,那么返回的地址可以理解為 str + i。
提示:如果希望查找某字符在字符串中最后一次出現(xiàn)的位置,可以使用 strrchr() 函數(shù)。



(10)

頭文件:#include <string.h>
strrchr() 函數(shù)用于查找某字符在字符串中最后一次出現(xiàn)的位置,其原型為:
    char * strrchr(const char *str, int c);
【參數(shù)】str 為要查找的字符串,c 為要查找的字符。
strrchr() 將會找出 str 字符串中最后一次出現(xiàn)的字符 c 的地址,然后將該地址返回。
注意:字符串 str 的結(jié)束標(biāo)志 NUL 也會被納入檢索范圍,所以 str 的組后一個字符也可以被定位。
【返回值】如果找到就返回該字符最后一次出現(xiàn)的位置,否則返回 NULL。
返回的地址是字符串在內(nèi)存中隨機分配的地址再加上你所搜索的字符在字符串位置。設(shè)字符在字符串中首次出現(xiàn)的位置為 i,那么返回的地址可以理解為 str + i。



(11)

頭文件:#include <string.h>
定義函數(shù):char * strtok(char *s, const char *delim);
函數(shù)說明:strtok()用來將字符串分割成一個個片段。參數(shù)s 指向欲分割的字符串,參數(shù)delim 則為分割字符串,當(dāng)strtok()在參數(shù)s 的字符串中發(fā)現(xiàn)到參數(shù)delim 的分割字符時則會將該字符改為\0 字符。在第一次調(diào)用時,strtok()必需給予參數(shù)s 字符串,往后的調(diào)用則將參數(shù)s 設(shè)置成NULL。每次調(diào)用成功則返回下一個分割后的字符串指針。
返回值:返回下一個分割后的字符串指針,如果已無從分割則返回NULL。



(12)

頭文件:#include <string.h>
定義函數(shù):char * strdup(const char *s);
函數(shù)說明:strdup()會先用maolloc()配置與參數(shù)s 字符串相同的空間大小,然后將參數(shù)s 字符串的內(nèi)容復(fù)制到該內(nèi)存地址,然后把該地址返回。該地址最后可以利用free()來釋放。
返回值:返回一字符串指針,該指針指向復(fù)制后的新字符串地址。若返回NULL 表示內(nèi)存不足。



(13)

頭文件:#include <ctype.h>
定義函數(shù):int toupper(int c);
函數(shù)說明:若參數(shù) c 為小寫字母則將該對應(yīng)的大寫字母返回。
返回值:返回轉(zhuǎn)換后的大寫字母,若不須轉(zhuǎn)換則將參數(shù)c 值返回。



(14)

頭文件:#include <stdlib.h>
定義函數(shù):int tolower(int c);
函數(shù)說明:若參數(shù) c 為大寫字母則將該對應(yīng)的小寫字母返回。
返回值:返回轉(zhuǎn)換后的小寫字母,若不須轉(zhuǎn)換則將參數(shù)c 值返回。



(15)

頭文件:#include <ctype.h>
定義函數(shù):int toascii(int c);
函數(shù)說明:toascii()會將參數(shù)c 轉(zhuǎn)換成7 位的unsigned char 值,第八位則會被清除,此字符即會被轉(zhuǎn)成ASCII碼字符。
返回值:將轉(zhuǎn)換成功的ASCII 碼字符值返回。



(16)

atol() 函數(shù)的名字源于“ascii to long”,用來將字符串轉(zhuǎn)換成長整型數(shù)(long),其原型為:
    long atol(const char * str);
【函數(shù)說明】atol() 會掃描參數(shù) str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數(shù)來檢測),直到遇上數(shù)字或正負符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。
【返回值】返回轉(zhuǎn)換后的長整型數(shù)(long);如果 str 不能轉(zhuǎn)換成 long 或者 str 為空字符串,那么將返回 0。
溫馨提示:ANSI C 規(guī)范定義了 stof()、atoi()atol()、strtod()、strtol()、strtoul() 共6個可以將字符串轉(zhuǎn)換為數(shù)字的函數(shù),大家可以對比學(xué)習(xí);使用 atol() 與使用strtol(nptr, NULL, 10) 結(jié)果相同。另外在 C99 / C++11 規(guī)范中又新增了5個函數(shù),分別是 atoll()、strtof()、strtold()、strtoll()、strtoull()。在此不做介紹,請大家自行學(xué)習(xí)。



(17)

頭文件:#include <stdlib.h>
atoi() 函數(shù)用來將字符串轉(zhuǎn)換成整數(shù)(int),其原型為:
int atoi (const char * str);
【函數(shù)說明】atoi() 函數(shù)會掃描參數(shù) str 字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace()函數(shù)來檢測),直到遇上數(shù)字或正負符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。
【返回值】返回轉(zhuǎn)換后的整型數(shù);如果 str 不能轉(zhuǎn)換成 int 或者 str 為空字符串,那么將返回 0。



(18)

頭文件:#include <stdlib.h>
函數(shù) atof() 用于將字符串轉(zhuǎn)換為雙精度浮點數(shù)(double),其原型為:
double atof (const char* str);
atof() 的名字來源于 ascii to floating point numbers 的縮寫,它會掃描參數(shù)str字符串,跳過前面的空白字符(例如空格,tab縮進等,可以通過 isspace() 函數(shù)來檢測),直到遇上數(shù)字或正負符號才開始做轉(zhuǎn)換,而再遇到非數(shù)字或字符串結(jié)束時('\0')才結(jié)束轉(zhuǎn)換,并將結(jié)果返回。參數(shù)str 字符串可包含正負號、小數(shù)點或E(e)來表示指數(shù)部分,如123. 456 或123e-2。
【返回值】返回轉(zhuǎn)換后的浮點數(shù);如果字符串 str 不能被轉(zhuǎn)換為 double,那么返回 0.0   。




三.文件操作函數(shù):

詳情可以參考我的另一篇博客:http://10704527.blog.51cto.com/10694527/1763701




四.數(shù)學(xué)函數(shù):

(1)

頭文件:#include <math.h>
sqrt() 用來求給定值的平方根,其原型為:
    double sqrt(double x);
【參數(shù)】x 為要計算平方根的值。
如果 x < 0,將會導(dǎo)致 domain error 錯誤,并把全局變量 errno 的值為設(shè)置為 EDOM。
【返回值】返回 x 平方根。
注意,使用 GCC 編譯時請加入-lm。



(2)

頭文件:#include <math.h>
pow() 函數(shù)用來求 x 的 y 次冪(次方),其原型為:
    double pow(double x, double y);
pow()用來計算以x 為底的 y 次方值,然后將結(jié)果返回。設(shè)返回值為 ret,則 ret = xy。
可能導(dǎo)致錯誤的情況:

  • 如果底數(shù) x 為負數(shù)并且指數(shù) y 不是整數(shù),將會導(dǎo)致 domain error 錯誤。

  • 如果底數(shù) x 和指數(shù) y 都是 0,可能會導(dǎo)致 domain error 錯誤,也可能沒有;這跟庫的實現(xiàn)有關(guān)。

  • 如果底數(shù) x 是 0,指數(shù) y 是負數(shù),可能會導(dǎo)致 domain error 或 pole error 錯誤,也可能沒有;這跟庫的實現(xiàn)有關(guān)。

  • 如果返回值 ret 太大或者太小,將會導(dǎo)致 range error 錯誤。

錯誤代碼:

  • 如果發(fā)生 domain error 錯誤,那么全局變量 errno 將被設(shè)置為  EDOM;

  • 如果發(fā)生 pole error 或 range error 錯誤,那么全局變量 errno 將被設(shè)置為 ERANGE。

注意,使用 GCC 編譯時請加入-lm。



(3)

頭文件:#include <stdlib.h>
定義函數(shù):int abs (int j);
函數(shù)說明:abs()用來計算參數(shù)j 的絕對值,然后將結(jié)果返回。
返回值:返回參數(shù)j 的絕對值結(jié)果。



(4)

頭文件:#include <math.h>
log() 函數(shù)返回以 e 為底的對數(shù)值,其原型為:
    double log (double x);
log()用來計算以e為底的 x 的對數(shù)值,然后將結(jié)果返回。設(shè)返回值為 ret,則
x = eret
如果 x 為負數(shù)或 0,則會發(fā)生錯誤并設(shè)置 errno 值。錯誤代碼:

  • EDOM:參數(shù)x 為負數(shù);

  • ERANGE:參數(shù)x 為零值,零的對數(shù)值無定義。

注意:使用 GCC 編譯時請加入-lm。



(5)

頭文件:#include <math.h>
log10() 返回以10為底的對數(shù)值,其原型為:
    double log10(double x);
log10()用來計算以10為底的 x 的對數(shù)值,然后將結(jié)果返回。設(shè)返回值為 ret,則
x = 10ret
返回值:返回參數(shù)x 以10 為底的對數(shù)值。
如果 x 為負數(shù)或 0,則會發(fā)生錯誤并設(shè)置 errno 值。錯誤代碼:

  • EDOM:參數(shù)x 為負數(shù);

  • ERANGE:參數(shù)x 為零值,零的對數(shù)值無定義。

注意:使用 GCC 編譯時請加入-lm。





向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI