溫馨提示
寫博客是為了記錄在開發(fā)過程中所涉及到的技術(shù)以及遇到的問題的解決,如果該博客對您有所幫助蒲肋,希望可以點(diǎn)個(gè)關(guān)注/喜歡;如果您對文章中的內(nèi)容有什么不同的見解,歡迎留言進(jìn)行討論奋早。謝謝!
(一) C語言之基本數(shù)據(jù)類型輸入輸出指針
一赠橙、基本數(shù)據(jù)類型
1耽装、頭文件
引入頭文件,在頭文件中只有函數(shù)的聲明,在編譯的時(shí)候會去找到函數(shù)的實(shí)現(xiàn)
#include <stdio.h>
2期揪、基本數(shù)據(jù)類型
(1)掉奄、基本數(shù)據(jù)類型所使用的輸出占位符
數(shù)據(jù)類型 | 占位符 |
---|---|
short | %d |
int | %d |
long | %d |
float | %f |
double | %lf |
char | %c |
十六進(jìn)制 | %x |
八進(jìn)制 | %o |
字符串 | %s |
(2)、基本數(shù)據(jù)類型所占字節(jié)數(shù)
數(shù)據(jù)類型 | 字節(jié)數(shù) |
---|---|
short | 2 |
int | 4 |
long | 8 |
float | 4 |
double | 8 |
char | 1 |
二、輸入輸出函數(shù)
1姓建、輸入函數(shù)
scanf("%d",&i);
控制臺輸入诞仓,& 為取地址符
2、輸出函數(shù)
printf("i的值為:%d\n",i);
控制臺輸輸出函數(shù)
#include <stdio.h>
void main(){
int i;
printf("請輸入一個(gè)整數(shù):");
//賦值
scanf("%d",&i);
//打印
printf("i的值為:%d\n",i);
system("pause");
}
三速兔、指針
1墅拭、指針的定義
指針存儲的是變量的內(nèi)存地址
變量名就是對內(nèi)存空間中一段數(shù)據(jù)的抽象
內(nèi)存地址就是系統(tǒng)給數(shù)據(jù)分配的編號
#include <stdio.h>
void main(){
int i = 0;
//指針變量,p 的值就是 i 這個(gè)變量的內(nèi)存地址
int* p = &i;
printf("內(nèi)存地址為:%#X\n",p);
system("pause");
}
控制臺輸出
內(nèi)存地址為:0X8FF764
指針類型的定義:在基本數(shù)據(jù)類型后加*
如:
float f = 88.6;
//創(chuàng)建一個(gè)float類型的指針
float* fp = &f;
或
float f = 88.6;
//創(chuàng)建一個(gè)float類型的指針
float *fp = &f;
通過指針修改變量的值
void main(){
int i = 90;
//創(chuàng)建一個(gè)int類型的指針變量
int *p = &i;
printf("i的值為:%d\n",i);
// p 代表變量 i 的內(nèi)存地址
// *p 代表 p 這個(gè)內(nèi)存地址上的數(shù)據(jù)
*p = 210;
printf("i的值為:%d\n",i);
system("pause");
}
控制臺輸出:
i的值為:90
i的值為:210
指針變量的內(nèi)存地址說明:
指針變量的內(nèi)存地址說明
2、指針的類型
指針有類型涣狗,地址沒有類型谍婉;
地址只是開始的位置,類型是指明讀取到什么位置結(jié)束
3镀钓、NULL空指針
指針為NULL的指針穗熬,默認(rèn)值為0,默認(rèn)內(nèi)存地址訪問0x000000操作系統(tǒng)不允許
void main(){
int i = 9;
int *p = NULL;
//空指針的默認(rèn)值為0
printf("%#X\n",p);
//訪問內(nèi)存地址0x000000操作系統(tǒng)不允許
printf("%d\n",*p);
getchar();
}
4、多級指針
指針保存的是變量的地址丁溅,保存的這個(gè)變量還可以是一個(gè)指針變量
void main(){
int a = 50;
//p1上保存的是 a 的地址
int* p1 = &a;
//p2上保存的是 p1 的地址
int** p2 = &p1;
printf("p1d的值為:%#x,p2的值為:%#x\n",p1,p2);
//通過p2 改變a的值
**p2 = 90;
printf("a的值為:%d\n",a);
getchar();
}
輸出結(jié)果為:
p1d的值為:0xcffa9c,p2的值為:0xcffa90
a的值為:90
5唤蔗、指針運(yùn)算
指針的運(yùn)算,一般在數(shù)組遍歷時(shí)才有意義唧瘾,基于數(shù)據(jù)在內(nèi)存中線性排列的方式
void main(){
//數(shù)組在內(nèi)存中連續(xù)存儲
int ids[] = {78,90,23,65,19};
//數(shù)組的變量名:ids就是數(shù)組的首地址
printf("%#x\n",ids);
printf("%#x\n",&ids);
printf("%#x\n",&ids[0]);
//指針變量
int *p = ids;
printf("%d\n",*p);
//指針的加法
p++;//指針向前移動(dòng)sizeof(數(shù)據(jù)類型)個(gè)字節(jié)
printf("%d\n",*p);
getchar();
}
輸出結(jié)果為:
0x7dfaa0
0x7dfaa0
0x7dfaa0
78
90
通過指針給數(shù)組賦值
void main(){
int uids[5];
int* p = uids;
////高級寫法
//int i = 0;
//for (;i < 5; i++){
// uids[i] = i;
//}
//早些版本的寫法
int i = 0;
for(; p < uids + 5 ; p++){
*p = i;
i++;
}
}
6措译、函數(shù)指針
函數(shù)指針的定義:
[函數(shù)返回值類型]([函數(shù)指針的名稱])([函數(shù)的參數(shù)列表])
#include <Windows.h>
void msg(char* title,char* content){
MessageBox(0,content,title,0);
}
void main(){
//msg();
//函數(shù)指針
void(*fun_p)(char* title,char* content) = msg;
fun_p("消息標(biāo)題","消息內(nèi)容");
getchar();
}