您好,登錄后才能下訂單哦!
這篇文章主要介紹“C語言中0、‘\0‘、‘0‘、NULL分別是什么意思”,在日常操作中,相信很多人在C語言中0、‘\0‘、‘0‘、NULL分別是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言中0、‘\0‘、‘0‘、NULL分別是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
0 '\0' NULL都是三種0值,它們在數字上是完全一樣的,而且在內存中存的都是二進制0。
‘、‘0‘、NULL分別是什么意思">
所以,它們的值是一樣的,只不過表現的形式不一樣,也就是它們的類型是不同的:
0在整形中表示數字0,在字符中'0'表示一個字符它的ASCII碼值為48,
'\0'是一個字符,表示字符串結束,在ASCII中的值為0
NULL 即空指針,它表示一個指針指向地址為0的空間,可以看到這里的0被強制轉化為void*指針,這也就意味著而NULL可以賦值給任何類型的指針:
‘、‘0‘、NULL分別是什么意思">
對于不同的類型,如果使用運算符(比如±=等運算符)運算的話,會進行隱式類型轉化,對于一些類型檢查嚴格的編譯器可能會報錯:
#include<stdio.h> int main() { int a = '\0';//將'\0'的ASCII碼值賦值給a char b = 0;//將0的二進制賦值給b int c = '0';//將字符'0'的ASCII碼值賦值給c int d = a + b + c;//在相加時,由于b是char型,所以會整形提升為int型 printf("%d\n", d);//以%d形式打印d內存空間的內容 printf("%c\n", '0');//打印字符'0' printf("%d\n", '0');//打印字符'0'的ASCII碼值 printf("%c\n", 0); //空(即NULL) printf("%d\n", 0);//數字0 printf("%c\n", 0 + '\0');//空(NULL) '\0'先轉換成int,然后ASCII編碼相加為0, //%c輸出,轉換成char,所以輸出NULL printf("%d\n", 0 + '\0');//先轉換成int,然后ASCII編碼相加為0,%d輸出,不用轉換,輸出數字0 printf("%c\n", 0 + '0');//'0'先轉換成int,然后ASCII編碼相加為0, //%c輸出,ASCII轉換成char,所以輸出字符'0' printf("%d\n", 0 + '0');//輸出字符'0'的ASCII碼值 }
‘、‘0‘、NULL分別是什么意思">
真實的類型轉化:改變內存中的數據
不改變內存的類型轉化:不改變內存中的數據,只改變對應的類型
舉個例子:比如把字符串"12345"轉化成整形數字12345,它們的內存大小和內容都發生了改變,字符串"12345"的內存大小為6字節,每個字節存儲的是單個字符的ASCII碼值,而整形數字12345則為4字節,內存中存儲的是數字12345的二進制補碼。
如果要實現這種轉化,則要使用對于的函數,在這里可以自己實現一個:
#include<stdio.h> int my_atoi(char* str) { int i = 0; int flag = 1;//默認字符串為正 int value = 0; if ('-' == str[0]) { flag = -1;//字符串第一個字符為‘-',則將flag置為-1 i++; } else if ('+' == str[0])//字符串第一個字符為'+',則不改變flag { i++; } else//字符串不加符號,默認為正 { ; } while (str[i] >= '0' && str[i] <= '9') { value = value * 10 + str[i] - '0'; i++; } return flag * value; } int main(void) { char str1[] = "+12345"; char str2[] = "-12345"; char str3[] = "12345"; int a = my_atoi(str1); int b = my_atoi(str2); int c = my_atoi(str3); printf("%d\n", a); printf("%d\n", b); printf("%d\n", c); return 0; }
‘、‘0‘、NULL分別是什么意思">
而對于不改變內存的類型轉化,則不會改變其內存空間中存儲的值,只是改變數據類型:
‘、‘0‘、NULL分別是什么意思">
對于C語言強制類型轉換時,會有兩種方式:
保持內存中的內容不變,僅修改對這段內存的解釋方式, 如int和char的互轉
保持值不變(近似),但修改內存中的內容,如int和double的互轉
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <iostream> void split(char* str, double* position) { char* words[3]; char* temp; temp = strtok(str, " "); int i = 0; while(temp!=NULL) { words[i] = temp; temp = strtok(NULL, " "); position[i] = atof(words[i]); i++; } } int main() { char lineBuf[] = "11.12 11.13 11.14"; std::cout << "1" << std::endl; double position[3]; split(lineBuf, position); std::cout << "1" << std::endl; for(int i=0; i<3; i++) { // std::cout << words[i] << std::endl; // position[i] = atof(words[i]); std::cout << position[i] << std::endl; } return 0; }
到此,關于“C語言中0、‘\0‘、‘0‘、NULL分別是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。