C語言 signed 與 unsigned:
C語言中,當表達式中存在有符號類型和無符號類型時所有的操作數都自動轉換為無符號類型
signed int a = -110; unsigned int b = 2; cout << a + b << endl;
浮點數來說,浮點數(float,double)實際上都是有符號數,unsigned 和signed前綴不能加在float和double之上,當然就不存在有符號數根無符號數之間轉化的問題了。
有符號和無符號整數的主要區別是如何看待最高位:
對於單字節二進制數01010110,無符號整數為86,有符號數也為86,因為最高位為0,所以二者間沒有區別。
對於二進制數10101100來說,無符號數為172,有符號數則為-84。二者區別很大。
unsigned char a = -1; cout << (unsigned)a;
上面輸出255,應該是這樣的:-1有符號,應該是11111111,然後把這個賦值給a,輸出unsigned a時解釋為255
數組初始化:
看代碼與結果:
1 #include <iostream> 2 3 using std::cout; 4 using std::endl; 5 using std::cin; 6 7 int a[10]; 8 9 void show(int arr[], int len) 10 { 11 for (int i = 0; i < len; ++i) 12 cout << arr[i] << " "; 13 cout << endl; 14 } 15 16 int main(void) 17 { 18 int b[10]; 19 int c[10] = { 1, 2 }; 20 show(a, 10); 21 show(b, 10); 22 show(c, 10); 23 cin.get(); 24 }
其實這種東西要看編譯器與具體系統環境,因為C標准從沒定義“未初始化的int類型的默認值”。一般全局變量會初始化為0,b數組在在棧裡面,都是髒數據,c數組初始化了前幾個,那麼後幾個也被初始化了。所以初始化的工作程序員還是不要逃避吧。
#include<stdio.h>
#include<stdlib.h>
int main()
{
void mystrcpy(char a[]);
char ch[19]="abcdefghijklm";
mystrcpy(ch);
return 0;
}
void mystrcpy(char a[])
{
int i;
char *p=a;
char b[20];
char *pb=b;
for(i=0;*(p+i)!='\0';i++)
*(pb+i)=*(p+i);
*(pb+i)='\0';
printf("The string after copy is %s\n",pb);
}
最直接的方法就是做往年二級C筆試試卷,真的很有效果,不過前十題選擇題別做,因為學C的時候沒學到,二級試卷難度不大,四十分鐘就可以解決了,所以一套試卷下來耗的時間不過,然後做完之後不懂的對照課本看看,補補,這樣考試的時候基本沒問題了,我就是這樣的!!!效果真的不錯!