1.開發(fā)環(huán)境
在cygine用gcc來開發(fā)梧兼,在window用dev-c++來開發(fā)
2.HelloWorld的編寫
#include <stdio.h> // 導入標準的輸入輸出庫 java import
#include <stdlib.h> //導入常用函數(shù)庫 rand()隨機數(shù) fopen打開文件 strcpy 字符串拷貝 strcat 字符串拼接
main(){//程序入口
printf("Hello World \n");// java system.out.printf();
system("pause"); //執(zhí)行DOS命令中的命令 }
3. 基本數(shù)據(jù)類型
java中的8種基本數(shù)據(jù)類型
boolean | char | byte | short | int | long | float | double |
---|---|---|---|---|---|---|---|
1byte | 2byte | 1byte | 2byte | 4byte | 8byte | 4byte | 8byte |
C語言中的8種基本數(shù)據(jù)類型
char | int | float | double | long | short |
---|---|---|---|---|---|
1 | 4 | 4 | 8 | 4 | 2 |
- c語言中char占1byte,java中占2byte
- c語言中l(wèi)ong 占4byte翅阵,java中占8byte
- java中的byte在c語言里面用char表示
- java中的string在c語言中用char[]表示
- signed ,unsigned修飾類型,不能修飾浮點型(float乔夯,double)库说,不影響數(shù)據(jù)類型的長度
4.輸入輸出函數(shù)
char | int | float | double | long |
---|---|---|---|---|
%c | %d | &f | %lf | %ld |
%x | %o | %s | %#x |
---|---|---|---|
十六進制輸出long,int,short | 八進制藏斩。。菇存。 | 字符串 | 0x開頭的十六進制 |
- 輸入函數(shù)
char arr[20];
scanf("%d",arr);//參數(shù)一:指定類型 參數(shù)二:存放位置
*輸出函數(shù)
printf("i= %d\n"夸研,i);
5.指針
- 指針就是存放地址的變量,內(nèi)存單元的編號
- int * p;//一個存放int型數(shù)據(jù)類型的內(nèi)存單元地址依鸥;
int i = 5亥至;//1000H
int * p ; //1001H
p = &i贱迟;
*p = 1000H;
p = 5;
&p = 1001H姐扮;
指針常見錯誤
- 1 指針未經(jīng)過初始化不能夠使用
- 2不同類型的指針不能夠相互轉(zhuǎn)換,一個指針只能指向所對應(yīng)的數(shù)據(jù)類型
- 3靜態(tài)變量不能跨函數(shù)訪問
6.程序執(zhí)行原理
內(nèi)存分為四塊地址:
常量區(qū)(define PI 3.14; const float PI 3.14;(不可修改))
方法區(qū)
棧(2M,一段連續(xù)的內(nèi)存空間衣吠,效率高茶敏,速度快,程序執(zhí)行時去使用蒸播,系統(tǒng)管理,靜態(tài)變量或方法)
堆(不連續(xù)的內(nèi)存空間萍肆,內(nèi)存碎片袍榆,速度慢,程序員管理塘揣,權(quán)限高)
7.指針和數(shù)組的關(guān)系
*數(shù)組是一段連續(xù)的內(nèi)存空間包雀,數(shù)組名指向數(shù)組的首地址
*指針占用的字節(jié)數(shù):等于操作系統(tǒng)的位數(shù)
8 動態(tài)內(nèi)存分配(malloc,realloc)
- malloc
//malloc()//在堆空間里面動態(tài)的申請一段連續(xù)的空間 動態(tài)變量
//參數(shù)一:所要申請的空間的字節(jié)數(shù)
//返回值:申請空間的首地址
int * p = (int *)malloc(sizeof(int));
*p = 99;
printf("指針p所指向的數(shù)據(jù) %d\n",*p);
釋放數(shù)據(jù)
int * p = (int *)malloc(sizeof(int));
*p = 99;
free(p)亲铡;
- realloc
//realloc()//修改數(shù)組
//參數(shù)一:指定需要修改的數(shù)組
//參數(shù)二:指定修改后的數(shù)組大小
//返回值:修改后的數(shù)組的首地址
int * p = (int *)realloc(arr,len+count);
9.動態(tài)內(nèi)存和靜態(tài)內(nèi)存的比較(堆和棧的區(qū)別)
- 1 申請方式不同才写。棧:系統(tǒng)自動分配,自動釋放(后進先出) 堆:程序員自己申請奖蔓,并指明大性薏荨(malloc)
- 2 申請后系統(tǒng)的響應(yīng)。棧:只要申請空間大于棧剩余空間就提供空間吆鹤,否則報棧溢出厨疙。堆:遍歷空閑內(nèi)存地址鏈表,第一個大于申請空間的地址分配給程序疑务,刪除鏈表中該節(jié)點沾凄,并將多余的地址節(jié)點再次保存在鏈表里面。
- 3 申請大小限制知允。棧:連續(xù)的撒蟀,較小的。堆:不連續(xù)温鸽,較大保屯。
- 4 申請效率比較 。棧:系統(tǒng)自動分配,速度快配椭,程序員無法控制虫溜。堆:malloc/new 分配內(nèi)存,速度慢股缸,有碎片衡楞,但是使用方便。
- 5 堆和棧中的存儲內(nèi)容敦姻。棧:主函數(shù)中下一個指令的地址——>函數(shù)的參數(shù)——>局部變量(靜態(tài)變量不入棧)瘾境。堆:堆的頭部存放用一個字節(jié)存放堆的大小,其他由程序員決定镰惦。
- 6 內(nèi)存的回收迷守。 棧:系統(tǒng)自動回收。堆:free()回收
10.函數(shù)的指針
void add(int i ,int j){
}
main(){
int (*pf)(int i,int j);//接受兩個int參數(shù)旺入,返回類型int 型的指針
pf = add;
}
11.結(jié)構(gòu)體和聯(lián)合體
- 結(jié)構(gòu)體
struct Student{
int age;
float score;
char sex;
}
main(){
struct Student stu = {20,99.0f兑凿,'f'};
stu.age = 21;
}
- 結(jié)構(gòu)體長度:當前結(jié)構(gòu)體中單個變量的長度(占有字節(jié)數(shù)最大的長度)*變量的個數(shù)
公式:字節(jié)數(shù)最大的變量 * 結(jié)構(gòu)體變量個數(shù) - 聯(lián)合體
struct date{//12
int year;//4
int month;//4
int day;//4
}today;
union{// 匿名聯(lián)合體
long i;//4
int k;//4
char ii;//1
}mix;
- 聯(lián)合體 變量共用同一塊內(nèi)存空間 節(jié)省內(nèi)存空間 方法返回類型
長度:占有字節(jié)數(shù)最大的變量的字節(jié)長度
12.枚舉
(android中狀態(tài)標記的時候可以用到)
#include<stdio.h>
enum Weekday{
Monday,Tuesday,Wednessday,Thursday,Friday,Saturday,Sunday
};
main(){
enum Weekday day = Sunday;
printf("day = %d\n",day);//day = 6;
system("pause");
}
- 默認從0開始茵瘾,也可以自定義開始值礼华。
enum Weekday{
Monday=1,Tuesday,Wednessday,Thursday,Friday,Saturday,Sunday
};
13.自定義數(shù)據(jù)類型Typedef
Typedef JavaNativeInterface jni;//jni就是JavaNativeInterface的代號