C 的兩個感悟

2021-08-23 15:09:46 字數 761 閱讀 3132

今天,用到memset(void*,char c,size_t)。用的時候,突然發現不明白其對應的型別要求。就是void*是什麼要求呢?我看了一下msdn,該函式功能是對每個byte進行賦值,所賦的值就是c,個數是size_t的值。

那麼,其它型別能不能呼叫這個函式呢?我是了一下。

int main()

發現,只有一部分是0,另外一部分沒有初始化。統計了一下,發現是64個是0.

後來,我猜它是以byte進行的,那麼int有四個byte,那麼size_t改一下試試。

int main()

發現全是0了。

也就是說,該函式是以byte進行賦值,而要對其它型別t進行賦值,則size_t為個數n*sizeof(t)。

另外,就是強制轉換。前段時候學影象處理,經常用到這個。 現在想想,有些疑惑。

以下是我的理解,不知道對不對:

比如:byte*p=new byte[10];

word *pw=(word*)p;

那麼,pw所指向的空間大小仍然是p所指空間大小,即10bytes。也就是說pw所指的資料個數為5.

如果我的理解沒有問題的話,那麼,我覺得指標作為引數傳遞的時候,一定不要對其進行強制轉換,否則的話資料個數發生改變,得到的很可能不是你想要的(比如:word變byte之後,就是兩個書據了。也許你本想是將word數值賦值給byte型別)。

突然發現,c真的是很不安全,因為是如此的自由。這個意思的話早就聽過,但是在這之前沒什麼體會。但是,c真的很靈活!不過,功夫沒到家之前最好不要用啦。。。。。。

C 的兩個感悟

今天,用到memset void char c,size t 用的時候,突然發現不明白其對應的型別要求。就是void 是什麼要求呢?我看了一下msdn,該函式功能是對每個byte進行賦值,所賦的值就是c,個數是size t的值。那麼,其它型別能不能呼叫這個函式呢?我是了一下。int main 發現,...

C 兩個原則

include using namespace std 2.抽象層業務邏輯 class ireader 3.底層業務邏輯 介面 細節 class book public ireader 介面 細節 class news public ireader 介面 細節 class electricbook ...

兩個C 的小問題

1.拷貝建構函式中的const adsrptplayliststatus adsrptplayliststatus other adsreport other 只有加const後才能正常的賦值 adsrptplayliststatus const adsrptplayliststatus other...