1. 程式人生 > >初學C語言(4)

初學C語言(4)

1.在 程式碼中 所有的計算 計算機都是將整數轉換為2進位制後 才進行計算的
2.計算數字二進位制中1的個數:可以計算負數
演算法:while(n!=0)
{
n=n&(n-1);
m++;
}
3.斐波那契 :
1 1 2 3 5 8 13 21
F1=1 f2=1 f3=1
F3=f1+f2;
f1=f2;
F2=f3;
第一項第二項已知 從第三項開始算

4.Break :結束所有迴圈
5.陣列:
陣列a[10];
Int b[10]=a; a 代表 a陣列 首元素的首地址
陣列初始化只有一次機會 定義時 同時初始化陣列
Int a[10]; 陣列初始值為隨機的
陣列存放在那?
棧內
陣列什麼時間確定大小?
編譯時
陣列什麼時候分配記憶體?
執行時 所有的變數都在執行是分配記憶體 大小為棧的大小
6.陣列越界的原理是什麼?
棧 每兩個變數有兩個int 類 的變數為哨兵位 當程式訪問到哨兵位 程式出錯
7.Sizeof(a) 代表整個陣列的位元組數
所以一般 sizeof(a)/sizeof(0); //求陣列大小
8.Int a[10];
Int* p=a;
a[2]與p[2]和*(p+2)等價 p向後移動兩個變數 [] 自帶解引用
Int* p ;不初始化 則為野指標; int* p=NULL: //0號地址 不能被訪問

陣列:int a[10];
1.&a+1 //表示直接加一個a[10];
2.sizeof(a)//表示整個陣列的位元組大小 //求長度 整個陣列的位元組大小 /字大小
3.陣列內的地址都是連續的
4.字元陣列
Char a[10];
\0; 字元結束符 代表字串結尾
在 char類中sizeof(a)//表示整個陣列的位元組大小 包括\0
0x00 0 ‘\0’ 都代表0;
Char a[5]=”abce”// 字元陣列 長度5 只能賦值4個 預設在結尾加\0
6.陣列的整體賦值只有一次機會 就是在初始化的時候
字串:char *p=”hdhdhdh”;結尾預設有一個\0
*(p+1)=‘d’; //出錯 因為 字串在 rodata (readonly) 段中 只讀 不可改//兩個指標指向字串;若兩個字串相等時;兩個指標指向的地址是同一個:
輸入 %s 遇到\0停止
7.Strlen :計算字串長度不包括\0 遇到/0停止計算
Char a[]=”adc”
Sizeof(a);
//為 4個