C/C++筆記(C語言重要問題重講,數據篇)

筆記原在個人印象筆記,現在整理搬運。

一、基本數據類型

1.數組的坑

int a[] = { 1, 2, 3, 4 };
printf( "a is %d,&a is %d,a+1 is %d,&a+1 is %d\n" , a, &a, a + 1, &a + 1);
//這裏a 與 &a值是一樣的,都是4127200
//a  代表數組的首元素地址
//&a 代表整個數組的地址

這裏寫圖片描述
2.typedef的使用(這種用法C++會改變)

struct Teacher
{
}Teacher
//C語言中,要使用必須要struct Teacher,這麼搞就不用了。
typedef struct Teacher
{
}Teacher;
Teacher t;

3.void*可以指向任何地址
void a; //錯誤,不知道如何分配內存
void *p = malloc(10);//可以但比較危險。

4.字面量
for(i=0;i<10;i++)
10就是字面量。

二、變量本質與空指針常量

變量:一段連續內存空間的別名,是一個門牌號,就沒有變量名。
1.修改內存方法

/*直接修改:*/
int a; //申請一塊內存,地址12451234(編的)
       //我們用a來代表。
a=10; //將地址12451234內存中放入10這個數

操縱a僅僅是告訴編譯器,操縱12451234這個空間。運行時就沒有a這個標號了。


/*間接修改:*/
int* p; //申請一塊內存,地址11111111(編的)
p = 0x12451234; 
    //將地址11111111內存中放入12451234這個數
*p = 100;
//1.將地址11111111內存中的數(12451234)取出
//2.將取出的12451234轉換成內存地址
//3.在上面那個內存地址中放入100這個數

2.空指針常量(C與C++不同)

    0、0L、'\0'、3 - 3、0 * 17 (它們都是“integer constant expression”)以及 (void*)0 (我覺得(void*)0應該算是一個空指針吧,更恰當一點)等都是空指針常量(注意 (char*) 0 不叫空指針常量,只是一個空指針值)。至於系統選取哪種形式作爲空指針常量使用,則是實現相關的。
    一般的 C 系統選擇 (void*)0 或者 0 的居多(也有個別的選擇 0L);至於 C++ 系統,由於存在嚴格的類型轉化的要求,void* 不能象 C 中那樣自由轉換爲其它指針類型,所以通常選 0 作爲空指針常量(C++標準推薦),而不選擇 (void*)0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章