-
定義結(jié)構(gòu)體
struct students
{
????? int math;
????? int eli;
}
這樣struct student就相當(dāng)于一種類型
在定義時
struct student stu[ ]這樣定義的數(shù)組就是他們的結(jié)合體
那么該里面的數(shù)據(jù)就是這樣
stu[20].math=69要指明哪一個
stu[20]. eli=79查看全部 -
堆上管理指針變量 需要手動分配內(nèi)存大小 介紹后手動釋放銷毀
查看全部 -
棧 先進(jìn)后出 用于作用域內(nèi)的內(nèi)存釋放 自動管理
查看全部 -
指針變量存放的是地址
查看全部 -
#include <stdio.h>
?? int main<int argc char **argv>
{
?????? printf (Hello World,this is C style/n)
?????? return 0;
}
????????
??
???查看全部 -
?char 類型的范圍是 [-128, 127],而 unsigned char 類型的范圍是 [0, 255]。查看全部
-
那么如果我們將 8 個 bit 組合起來,通過排列組合,我們就可以得到 2 的 8 次方,也就是 256 個數(shù)字的數(shù)據(jù)容量。在計(jì)算機(jī)中,我們把 8 個 bit 的容量稱之為 1 個 byte, 中文叫做字節(jié)。8bit = 1 byte查看全部
-
,計(jì)算機(jī)是二進(jìn)制的。那么如何存放更復(fù)雜的數(shù)據(jù)呢?答案是排列組合。
在計(jì)算機(jī)中,存在這樣的一個存儲單元,一個存儲單元可以存放 0 或者 1 兩種狀態(tài),那么他就能存放兩個數(shù)字。我們管這樣一個存儲單元叫做 1bit,中文叫做 1 位。
查看全部 -
我們在定義數(shù)組的時候,常常這樣定義,int arr[5];
在 C++ 中,數(shù)組表示的是一段連續(xù)的內(nèi)存存儲空間
如上圖,每個元素之間是沒有空隙的,這樣每個元素的內(nèi)存地址,其實(shí)也是有規(guī)律可循的??梢詫戇@樣一個程序,來驗(yàn)證我們的想法:
include <stdio.h>
int main(int argc,char **argv)
{
? ?int array[5];
? ?printf("array[0]: %p\n", &array[0]); // %p 用來打印數(shù)組的地址
? ?printf("array[1]: %p\n", &array[1]);
? ?printf("array[2]: %p\n", &array[2]);
? ?printf("array[3]: %p\n", &array[3]);
? ?printf("array[4]: %p\n", &array[4]);
? ?return 0;
}程序運(yùn)行結(jié)果如下:
array[0]: 0x7ffee9d81490
array[1]: 0x7ffee9d81494
array[2]: 0x7ffee9d81498
array[3]: 0x7ffee9d8149c
array[4]: 0x7ffee9d814a0指針的地址以16進(jìn)制的方式輸出,可以看出,這幾個地址中,每兩個相鄰的地址都相差 4 ,而每一個元素都是 int類型,int 占 4 個字節(jié)大小,說明他們確實(shí)是緊密相連的。
驗(yàn)證了數(shù)組的地址之后,再來看看數(shù)組是如何訪問數(shù)組中的元素的。假設(shè)我們想要訪問第 2 個元素(從 0 開始)
array[1];
那么 C++ 在碰到這行代碼的時候,是先拿到第 2 個元素的地址,然后通過地址去訪問元素,那么如何拿到第二個元素的地址呢?剛剛的實(shí)驗(yàn)證明,數(shù)組中元素的地址都是等差的,所以只要拿到第一個元素的地址,再加上相應(yīng)元素的偏差,就可以拿到第二個元素的地址了。
那么,對于數(shù)組來說,第一個元素的地址是什么的?答案是數(shù)組名。
我們再嘗試寫一個測試程序
#include <stdio.h>
int main(int argc,char **argv)
{
? ?int array[5];
? ?printf("array: %p\n", array);
? ?printf("array[0]: %p\n", &array[0]); // %p 用來打印數(shù)組的地址
? ?printf("array[1]: %p\n", &array[1]);
? ?printf("array[2]: %p\n", &array[2]);
? ?printf("array[3]: %p\n", &array[3]);
? ?printf("array[4]: %p\n", &array[4]);
? ?return 0;
}程序運(yùn)行結(jié)果如下:
array: 0x7ffeefa29490
array[0]: 0x7ffeefa29490
array[1]: 0x7ffeefa29494
array[2]: 0x7ffeefa29498
array[3]: 0x7ffeefa2949c
array[4]: 0x7ffeefa294a0我們發(fā)現(xiàn),直接輸出 array 和首元素的地址,是一模一樣的,那么就可以得出一個結(jié)論:數(shù)組名是一個指向數(shù)組首元素的指針
但是這個指針和我們常見的指針有一些不一樣的地方,這個指針是一個常量,所以我們是不可以對其進(jìn)行修改的。也就是說,我們不能對其進(jìn)行 array = p 或者 array++ 這樣包含重新賦值的操作,但是我們?nèi)匀豢梢杂弥羔樀挠梅▉聿僮魉?/p>
例如,使用指針的加減法來訪問對應(yīng)的元素
#include <stdio.h>
int main(int argc,char **argv)
{
? ?int array[5];
? ?*(array + 2) = 1;
? ?return 0;
}代碼中的?*(array + 2) = 1;?就等價于?array[2] = 1;
指針篇
我們在前面講過 malloc 分配內(nèi)存的用法。來看一個例子
#include <stdio.h>
int main(int argc,char **argv)
{
? ?int * p = (int *)malloc(5 * sizeof(int));
? ?free(p);
? ?return 0;
}在上面的程序中,我們分配出來了一個 5 個 int 大小的儲存空間:
在這塊儲存空間內(nèi),可以存放 5 個 int 類型的數(shù)字,假如想要訪問第 3 個數(shù)字,我們可以把指針向后移動兩個元素的位置,寫成?*(p + 2)
那么指針可不可以按照數(shù)組的訪問方式去訪問呢?p[2]
其實(shí)也是可以的,p[2]和*(p + 2)在這里是等價的。
查看全部 -
enum 枚舉類型 枚舉類型函數(shù)里面 每個枚舉的量都是用","隔開的。
enum?Week?
{
????Mon,?//?星期一
????Tue,?//?星期二
????Wed,?//?星期三
????Thu,?//?星期四
????Fri,?//?星期五
????Sat,?//?星期六
????Sun,?//?星期日
};
int?main(int?argc,char?**argv)
{
????Week?week?=?Week::Fri;
????return?0;
}在這段程序里,week 這個枚舉變量,只能是定義好的 7 個值,不能是其他的值,而且在賦值的時候,你可以直接看出來這個值是什么,而不用再去和數(shù)字進(jìn)行對應(yīng)。這樣就可以最大限度得減少出錯的可能性了。對于例如星期,季節(jié),性別之類的概念,我們應(yīng)該優(yōu)先使用枚舉類型。查看全部 -
#include<stdio.h>
#include<iostream>
struct Student
{
? ? int math;
? ? int english;
};
int main(int argc,char **argv)
{
? ? struct Student stu[50];
? ? //其中一個學(xué)號為:21的學(xué)生成績賦值
? ? stu[20].math = 100;
? ? stu[20].english = 98;
}
查看全部 -
那么布爾類型和關(guān)系運(yùn)算符有什么聯(lián)系呢?我們都知道,關(guān)系運(yùn)算用來計(jì)算的是兩個量之間的關(guān)系的,這種關(guān)系,其實(shí)就是布爾類型。也就是說,關(guān)系運(yùn)算的結(jié)果,就是布爾類型。
需要注意的是,在早期的 C++ 中是沒有 bool 類型的,在沒有 bool 類型的年代,人們常用普通的整型來表示二值化語義,即 0 表示 false,非 0 表示 true。后來這種使用習(xí)慣被傳承到今天,因此,有時候也會用普通的整型代替 bool 類型。
查看全部 -
我們把焦點(diǎn)放到這個?int a;?上面。在 C++ 中,我們通常管這行代碼叫做聲明了一個變量,這個變量的名字叫做 a,而前面的 int,表示這個變量可以存放一個整型的數(shù)據(jù)類型,整型的意思就是整數(shù)。這里的變量,雖然和我們數(shù)學(xué)中的變量不完全相同,但是卻是非常相近的概念。
#include <stdio.h>
int main(int argc,char **argv)
{
? ?int a;
? ?return 0;
}可以看到,聲明常量和聲明一個變量非常像,不一樣的地方就是在前面加了一個 const。這個 const 代表的就是不可變的。
#include <stdio.h>
int main(int argc,char **argv)
{
? ?const int c = 10;
? ?return 0;
}查看全部 -
break 跳出循環(huán);continue 如果符合條件執(zhí)行了continue,那么continue后的循環(huán)指令不再執(zhí)行;而是從新一輪的下一個循環(huán)重新開始。
查看全部 -
s?w?itch 接受了一個變量s;之后用case分情況, case后接的括號里只能是常量。 case(常量)
都不符合所列的若干case,用default表示不符合上述所有的情況。
查看全部
舉報