網(wǎng)站建設(shè)經(jīng)驗(yàn)總結(jié)百度今日小說(shuō)搜索風(fēng)云榜
1.int,short,long都是signed的 但是char可能是signed 也可能是unsigned的——《C++ Primer》
2.在16位的PC中 char類(lèi)型占1個(gè)字節(jié) int占2個(gè)字節(jié) long int占4個(gè)字節(jié) float占四個(gè)字節(jié) double占八個(gè)字節(jié)
3.自增運(yùn)算符和自減運(yùn)算符即使是在判斷條件中使用也會(huì)實(shí)際生效
int i = 1;
int j = i++;
if((i > j++) && (i++ == j)) i += j;
第一行:i=1
第二行:因?yàn)槭呛笞栽?因此先把1賦值給j 后i+1 所以此時(shí)i=2 j=1
第三行:i>j++翻譯為2>1 這個(gè)正確 但是j++需要自增 所以變成了i=2j=2
第二個(gè)條件:i++ 所以i是原值參與運(yùn)算 i=2 j=2相等 但是這個(gè)考慮完后i++ 所以此時(shí)i=3
因?yàn)榛蜻\(yùn)算的兩邊都成立 真真為真 則if語(yǔ)句成立 因此i = i+j =5
前自增和后自增的差異要謹(jǐn)記
4.數(shù)組中指針的表示形式
int a[3][3] = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };//一種表達(dá)形式
int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}};
&a[2][1]取第三行第二列的元素的地址
*(a[2]+1)訪問(wèn)第三行第二列元素的地址
a[2]+1:運(yùn)算的結(jié)果是”第三行第二列的值的地址->實(shí)際上是一個(gè)二維數(shù)組的地址
*(a+2)+1指的是第三行第二列的那個(gè)地址
備注一點(diǎn): 在指針當(dāng)中 *a 就是訪問(wèn)a這個(gè)指針變量指向地址的值 注意是值
? ? ? ? ? ? ? ? ? ? 在數(shù)組中,*(a)是訪問(wèn)a這個(gè)指針變量指向的地址 而不是值
? ? ? ? ? ? ? ? ? ?這個(gè)地址就是這一行的地址
a: a:第一行的地址
a: 0x7ffeefbff580
*a: 0x7ffeefbff580
**a: 1
a是整個(gè)二維數(shù)組的首地址
*a是取二維數(shù)組的第一個(gè)數(shù)組的地址 在值上和a相等 在值和意義上和a[0]相等
5.短路:
短路只會(huì)出現(xiàn)在邏輯運(yùn)算符中 ||與&&
int j=0;
int k=1;
if(j++&&k++){};//問(wèn)執(zhí)行后的j與k是多少
//答案是 j=1 k=0
//因?yàn)楹笞栽?j先帶入值進(jìn)去為0 但是或需要兩個(gè)為真 所以后邊的k被短路了 自然不會(huì)增加
int j=0;
int k=1;
if(k++||j++){};//問(wèn)執(zhí)行后的j與k是多少
//答案是 k=2 j=0
//因?yàn)楹笞栽?k帶入后k自增為2 因?yàn)檫壿嫽蜻\(yùn)算中出現(xiàn)了真值 所以后面的j被短路 j為0不變
6.瑣碎的空指針問(wèn)題
int *p=NULL;與 int *p=0與p='\0'是等價(jià)的
7.當(dāng)數(shù)組在形參時(shí)的內(nèi)存問(wèn)題:
void print_array(int arr[]) {int n = sizeof(arr) / sizeof(arr[0]);for (int i = 0; i < n; i++)printf("%d ", arr[i]);
}int main() {int arr[] = {1, 2, 3, 4, 5};print_array(arr);return 0;
}
只會(huì)輸出1和2 打印兩次
因?yàn)閿?shù)組放在形參的時(shí)候相當(dāng)于一個(gè)指針 sizeof大小為8 一個(gè)int數(shù)大小為4
所以循環(huán)只會(huì)執(zhí)行兩次
8.~的取反操作
#include <stdio.h>
int main() {unsigned char a = 235;unsigned char b = ~a;unsigned char c = b >> 1;printf(“%d”, c);
};
a的二進(jìn)制是(1110 1011)2
對(duì)a進(jìn)行取反->(0001 0100)2為b的值
b右移一位(0000 1010)2
化為十進(jìn)制就是10 則答案是10
我們要記住~是對(duì)其二進(jìn)制位取反的意思