日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C专家编程复习摘要一

發布時間:2023/12/9 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C专家编程复习摘要一 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、關于類型轉換

? ? K&R C的不說了,說了還容易混淆,只說ANSI C的:

? ? 如果其中一個操作數的類型是unsigned long int,那么另外一個操作數也被轉換為unsigned long int。其次其中一個操作數的類型是long int,而另一個操作數的類型是unsigned int,如果long int能夠完整表示unsigned int 的所有值,那么unsigned int 類型操作數被轉換為long int ,如果long int 不能完整表示unsigned int 的所有值,那么兩個數都被轉換為unsigned long int 。再再次,如果其中一個操作數是unsigned int,那么另外一個操作數(int、char、unsigned char)被轉換為unsigned int。所上情況以外,兩個操作數都為int。

通俗來說:

? ? 當執行蒜素運算時,操作數的類型如果不同,就會發生轉換。數據類型一般操作浮點精度更高、長度更長的方向轉換,整數型如果轉換為singed不會丟失信息,就轉換為singed,否則轉換為unsigned。

看下面兩個例子:

例1:小于號左右兩邊操作數都轉換為int

int main(){if (-1 < (unsigned int)1)printf("-1 is less than (unsinged int)1\n");elseprintf("-1 is not less than (unsinged int)1\n");return 0;}

例2:-1轉換為unsigned int

int main(){if (-1 < (unsigned int)1)printf("-1 is less than (unsinged char)1\n");elseprintf("-1 is not less than (unsinged char)1\n");return 0;}

二、幾個怪異的聲明標示符

volatile:

? ? ? 它被設計用來修飾被不同線程訪問和修改的變量。確保本條指令不會因編譯器優化而省略,且要求每次直接讀值。優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。

register:

? ? ?register修飾符暗示編譯程序相應的變量將被頻繁地使用,如果可能的話,應將其保存在CPU的寄存器中,以加快其存儲速度。

三、關于sizeof

#include <stdio.h>int main(){struct Test1{int i;char c;};struct Test2{char c;int i;};struct Test3{double d;char c;};struct Test4{char c;double d;};printf("test1:%d, test2:%d, test3:%d, test4:%d\n", sizeof(struct Test1), sizeof(struct Test2), sizeof(struct Test3), sizeof(struct Test4));return 0;}

在vs2008下輸出結果為8、8、16、16,在下結果為8、8、12、12。

原因見這個地方:http://humanbeng.blog.163.com/blog/static/95932401201091623435337/


轉載于:https://www.cnblogs.com/WIT-Evan/archive/2012/12/08/7291447.html

總結

以上是生活随笔為你收集整理的C专家编程复习摘要一的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。