C語言基礎知識

來源:互聯網
上載者:User

標籤:

1. C語言中無符號數與有符號數

unsigned int a = 6;int b = -20;printf("a+b = %d\n",a+b);            #輸出-14printf("a+b %s \n",(a+b)>0 ? "> 0":" < 0");    #輸出a+b > 0

有符號數和無符號數在進行比較運算時(==,>=,<=,>,<),有符號數隱式的轉換成無符號數。上述中,a+b的值為-14(1111_1111_1111_0010),但是a+b 比較時,隱式轉換成無符號數,因此輸出為>0

記住一點:-1為有符號整型資料,常量數值在整形範圍內,均為int類型,如果為正數或0,則作為無符號int,否則為有符號int。比較子兩邊的資料類型會在編譯器的協助下,自動統一的。

再記住一點:C語言規定是從取值範圍小的往大的提升,char—>unsigned char—>short—>unsigned short—>int--->unsinged int—>long—>unsigned long –>long long ---> unsigned long long

2. 函數不能反悔棧記憶體的指標,可以返回堆記憶體的指標。對於null 指標,連續兩次free,不會出錯。對於非null 指標,連續兩次free,會出錯。

int *a1;    a1 = (int*)malloc(10);    a1[0]=10;    printf("a1:%p a1[0]:%d \n",a1,a1[0]);     //輸出a1:0x85c9008 a1[0]:10    free(a1);    //free(a1);            //加上這句會報錯    printf("a1:%p a1[0]:%d \n",a1,a1[0]);    //輸出a1:0x85c9008 a1[0]:0

根據輸出可以得知,free後,a1的指向的地址值沒有改變,但是這塊地址所代表的空間已經是無效空間了,不能使用。為了防止這種情況,free後的,應該設定a1= NULL; 這樣,防止後面的代碼對a1的空間誤操作。

3. 引用與指標有什麼區別?

    引用必須初始化,指標不需要。

    引用初始化之後不能被改變,指標可以改變所指的對象。

    不存在指向空值的引用,但是存在指向空值的指標

Technorati 標籤: C語言 基礎

C語言基礎知識

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.