#include <stdio.h>
#include <string.h>
int main()
{
signed char a[1000];
int i = 0;
for (i = 0; i < 1000; i++)
{
a[i] = -1 - i;
}
printf("%d\n", strlen(a));
return 0;
}
當(dāng) i = 128 的時(shí)候,a[128] = -1 - 128 = -129 ,signed char 的取值范圍是 -128~127,所以超出了范圍,-129 源碼: 1 1000 0001 ,補(bǔ)碼:1 0111 1111 ,低 8 位 0111 1111 ,即 127。
當(dāng) i = 255 的時(shí)候,a[255] = -1 - 255 = -256 , -256 的原碼 11 0000 0000 補(bǔ)碼:11 0000 0000 ,低 8 位全為 0, strlen 遇到 '\0' 就結(jié)束,所以上述代碼輸出 255。
所以,char 類(lèi)型如果直接使用就用來(lái)表示字符,如果加了 signed 和 unsigned 限定符的話就用來(lái)表示數(shù)字。
bool b = FALSE;
if(b)
printf("TRUE");
if(!b)
printf("FALSE");
上面這種寫(xiě)法是值得推薦的,其他方式會(huì)有問(wèn)題。
if(test > -EPSINON) || (test < EPSINON); // EPSINON 為定義好的精度
if(NULL == p)
if(NULL != p)
if((x = y) != 0 )
printf("------");
這樣寫(xiě)是錯(cuò)誤的,應(yīng)該這樣寫(xiě)
x = y;
if(x != 0)
printf("-----");
當(dāng)嵌套比較少量的分支的時(shí)候可以使用 if else 組合,但是當(dāng)嵌套的分支多的時(shí)候就要使用 switch case 組合了,但是也不要刻意去創(chuàng)造一個(gè) switch 變量。
switch (x == 0)
{
......
}
for(int i = 0; i < n; i++)
{
n = 10;
}
goto 關(guān)鍵字可以在代碼中靈活的跳轉(zhuǎn),存在很大的爭(zhēng)議,有的建議慎用 goto ,有的建議不要用。我覺(jué)得用得好還是可以用。
int *p = NULL;
...
goto error;
...
error:
return -1;
void *p = NULL;
int *p_int = NULL;
p = p_int; //不會(huì)報(bào)錯(cuò),是正確的
p_int = p; //報(bào)錯(cuò),是錯(cuò)誤的
void *memcpy(void *dest, const void *src, size_t len)
void a;
fun(void a);
return(value); //括號(hào)可以省略,但一般不省略,尤其是返回一個(gè)表達(dá)式的值得時(shí)候
先忽略類(lèi)型,看 const 離誰(shuí)近就修飾誰(shuí)
const int *p; // const *p ,修飾 *p , p 可以改變, p 指向的內(nèi)容不可變
int const *p; // const *p ,同上
int * const p; // * const p ,修飾 p,p 不可以改變,p 指向的內(nèi)容可以改變
const int * const p; // const * const p ,第一個(gè) const 修飾 *p,第二個(gè) const 修飾 p,所以 p 和 p 指向的內(nèi)容都不能改變
在這里 volatile 只是告訴編譯器 a 的值可能會(huì)被改變,需要訪問(wèn)時(shí)每次都要重新到內(nèi)存中去取。
空結(jié)構(gòu)體占多大內(nèi)存?大多數(shù)編譯器是 1,gcc 是 0。所以不要太相信書(shū)本上的東西,一定要自己親自驗(yàn)證。
typedef struct st_type{
int i;
a[0];
}type_a;
//有些編譯器會(huì)報(bào)錯(cuò),可以改成
typedef struct st_type{
int i;
int a[];
}type_a;
//可以使用下面的代碼為柔性數(shù)組分配內(nèi)存,但是分配好之后使用 sizeof 計(jì)算結(jié)構(gòu)體的大小依然是不包含柔性數(shù)組所占的內(nèi)存的。
type_a *p = (type_a *)malloc(sizeof(type_a) + 100 * sizeof(int));
//記得用完之后要 free
free(p);
union {
int i;
char ch;
}c;
c.i = 1;
//這時(shí)候 ch 只需要一個(gè)字節(jié)存儲(chǔ),在低地址,如果 ch 的值等于 1, 說(shuō)明 i 的值得低字節(jié) 1 存儲(chǔ)在低地址,是小端模式。Ubuntu、Windows 等 x86 架構(gòu)都是小端模式。
int main()
{
int a[5] = { 1, 2, 3, 4, 5 };
int *p1 = (int *)(&a + 1);
int *p2 = (int *)((int)a + 1);
printf("%x %x\n", p1[-1], *p2);
return 0;
}
// 5 2000000 小端模式 大端模式 5 100
enum enum_type_name{
ENUM_CONST_1,
ENUM_CONST_2,
ENUM_CONST_3,
...
ENUM_CONST_n
} enum_variable_name;
typedef struct student{
int age;
char name;
} stu_1, *stu_2;
const stu_2 student_1; // 其實(shí)是 const (struct student *)student_1; 所以 修飾的是 student_1 本身,而不是指向的內(nèi)容
stu_2 const student_2; // 其實(shí)是 (struct student *)const student_2; 所以 修飾的也是 student_2 這個(gè)指針本身,而不是指向的內(nèi)容
#defien INT32 int
typedef int INT32_t
unsigned INT32 i = 10; //沒(méi)問(wèn)題,只是替換
unsigned INT32_t j = 10; //錯(cuò)誤,不支持
#defien PCHAR char*
typedef char* pchar
PCHAR ch2, ch3; //ch2 是 char * 類(lèi)型,ch3 卻是 char 類(lèi)型
pchar ch3, ch5; //ch4, ch5 都是 char * 類(lèi)型
不復(fù)習(xí)不知道,一復(fù)習(xí)嚇一跳,原來(lái) C語(yǔ)言 關(guān)鍵字還有這么多知識(shí)點(diǎn),以前也沒(méi)怎么注意,當(dāng)然不止這些,我只是記錄了我認(rèn)為比較重要而且容易搞混淆的。
如果你覺(jué)得我的讀書(shū)筆記對(duì)你有用,可以關(guān)注微信公眾號(hào) kalier 哦,最新的文章和讀書(shū)筆記都將在這里首發(fā)。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。
分享標(biāo)題:讀書(shū)筆記-C語(yǔ)言關(guān)鍵字-創(chuàng)新互聯(lián)
瀏覽路徑:http://www.chinadenli.net/article34/ccesse.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗(yàn)、網(wǎng)站制作、微信公眾號(hào)、網(wǎng)站排名、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容