中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

C語言中0、‘\0‘、‘0‘、NULL分別是什么意思

發布時間:2021-08-30 09:30:33 來源:億速云 閱讀:1495 作者:chen 欄目:開發技術

這篇文章主要介紹“C語言中0、‘\0‘、‘0‘、NULL分別是什么意思”,在日常操作中,相信很多人在C語言中0、‘\0‘、‘0‘、NULL分別是什么意思問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言中0、‘\0‘、‘0‘、NULL分別是什么意思”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

0 ‘\0' ‘0' NULL

0 '\0' NULL都是三種0值,它們在數字上是完全一樣的,而且在內存中存的都是二進制0。

C語言中0、‘<img src=‘、‘0‘、NULL分別是什么意思">

所以,它們的值是一樣的,只不過表現的形式不一樣,也就是它們的類型是不同的:

0在整形中表示數字0,在字符中'0'表示一個字符它的ASCII碼值為48,

'\0'是一個字符,表示字符串結束,在ASCII中的值為0

NULL 即空指針,它表示一個指針指向地址為0的空間,可以看到這里的0被強制轉化為void*指針,這也就意味著而NULL可以賦值給任何類型的指針:

C語言中0、‘<img src=‘、‘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碼值
}

C語言中0、‘<img src=‘、‘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;
}

C語言中0、‘<img src=‘、‘0‘、NULL分別是什么意思">

而對于不改變內存的類型轉化,則不會改變其內存空間中存儲的值,只是改變數據類型:

C語言中0、‘<img src=‘、‘0‘、NULL分別是什么意思">

對于C語言強制類型轉換時,會有兩種方式:

  1. 保持內存中的內容不變,僅修改對這段內存的解釋方式, 如int和char的互轉

  2. 保持值不變(近似),但修改內存中的內容,如int和double的互轉

附:c語言中不同數據類型之間的相互轉化

#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分別是什么意思”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

皋兰县| 五寨县| 高清| 虎林市| 綦江县| 万安县| 博罗县| 大洼县| 富平县| 太仓市| 墨脱县| 乌拉特后旗| 玛沁县| 麻江县| 桃园市| 常德市| 虎林市| 德兴市| 项城市| 正阳县| 舞钢市| 连江县| 霍山县| 邯郸县| 赤水市| 连城县| 布拖县| 蒙城县| 拉萨市| 清流县| 衡水市| 水城县| 伊吾县| 喀喇沁旗| 定远县| 新平| 晋宁县| 湖北省| 汾阳市| 石门县| 临潭县|