C語言指針入門的簡單實(shí)例教程
c語言的指針的存在使得c語言對硬件的操控,以及靈活性得到了極大的提高。
但是指針的使用存在著很多難點(diǎn)問題。
#include<stdlib.h>
#include<stdio.h>
//這里的函數(shù)是指針做參數(shù)的例子,要知道這個(gè)特性可以彌補(bǔ)c語言只能有一個(gè)返回值的特性。
void swap1(int *pa,int *pb){
int t =*pa;
*pa=*pb;
*pb=t;
}
//main()函數(shù)必須要返回一個(gè)數(shù)字
int main(){
int a =15;
int b=10;
int* t;
t=&b;
a=b;
b=*t;
printf("%d\n",b);
swap1(&a,&b);
printf("%p\t%p",a,b);
return 0;
}
這里我們先定義兩個(gè)整型的變量a,b
然后再定義一個(gè)臨時(shí)的指針變量,用來存儲(chǔ)中間變量
然后將b的變量的內(nèi)存地址賦值給t,注意這里 t 代表的是內(nèi)存地址
然后把b的值給a,再用b接受t地址所存儲(chǔ)的變量, 注意這里的*t是指t這個(gè)地址所指的那個(gè)變量。
指針與數(shù)組
其實(shí)數(shù)組的int a[10];
里來說a其實(shí)是這個(gè)數(shù)組的第一個(gè)元素的a[0]的指針
所以數(shù)組變量本身就是表達(dá)地址,所以
int a[10]; int *p=a; //無需用&取地址 但是數(shù)組的單元表達(dá)的是變量,需要用&取地址 a==&a[0]; []運(yùn)算符可以對數(shù)組做,也可以對指針做: p[0] <==>a[0]; 這里的p[0]相當(dāng)于*p *a可以表示a[0] 數(shù)組變量是const的指針
const 這個(gè)修飾符的作用就是表明一個(gè)變量是指定的值不能改變了
int* const p=&i; //p是const *q=26;//OK q++; //ERROR
int ls=58;
int ls1=64;
int* const q=&ls;
*q =10;
*q=20;
// q = &ls1; 這句是不能通過編譯的,因?yàn)檫@個(gè)指針是不能指向其他位置的地址
//執(zhí)行成功說明這里的指針變量是可以被改變的
ls=36 ;
printf("\n%d",*q);
//然后我們來看另外一種情況
int P1=10;
int P2=20;
int const *T=&P1;
T=&P2;//執(zhí)行結(jié)果為30
//*T =15;這里是不能通過編譯的,因?yàn)檫@個(gè)指針指向的位置存儲(chǔ)的變量是不能賦值改變的。
P2=30;
printf("\n%d",*T);
//關(guān)鍵在于這里的const是在*的前面還是后面決定的
return 0;
void mai(const int*p){
int *ls=*p;
printf("ls的地址:%p",ls);
}
這里我們傳入了一個(gè)指針,但是在函數(shù)里,是不能改變這個(gè)指針?biāo)赶虻闹档?/pre>
指針的運(yùn)算
#include<stdio.h>
#include<stdlib.h>
int main(){
int i,j;
i=10;j=12;
printf("i,j:%d,%d\n",&i,&j);
printf("i,j:%d,%d",*&i+1,&j);
printf("\n&i-&j:%d",(&i)-(&j));//這里兩個(gè)地址做差其實(shí)是地址差/類型所占的位數(shù)
int *p;
p=&i;
*p++;//實(shí)際上是*(p++);++優(yōu)先級(jí)比*高;數(shù)組遍歷
printf("\n*p:%d",*p);
return 0;
}
指針的類型轉(zhuǎn)換
void*表示不知道指向什么東西的指針
指針變量的大小是相同的但是,指針是有類型的差別
總之指針的作用
1、需要傳入較大的數(shù)據(jù)的時(shí)候用做參數(shù)
2、傳入數(shù)組后對數(shù)組做操作
3、函數(shù)返回的結(jié)果不止一個(gè)的時(shí)候可以用指針帶出(c只能return一個(gè)變量,或者值)
需要要用函數(shù)來修改不止一個(gè)變量
4、動(dòng)態(tài)申請內(nèi)存.......
具體的后續(xù)會(huì)更。
總結(jié)
到此這篇關(guān)于C語言指針入門的簡單實(shí)例的文章就介紹到這了,更多相關(guān)c語言指針實(shí)例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用Matlab實(shí)現(xiàn)圖像亮度分布統(tǒng)計(jì)圖
這篇文章主要介紹了如何利用Matlab實(shí)現(xiàn)圖像亮度分布統(tǒng)計(jì)圖的繪制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Matlab有一定的幫助,感興趣的可以了解一下2022-05-05
C++的std::vector<bool>轉(zhuǎn)儲(chǔ)文件問題
這篇文章主要介紹了C++的std::vector<bool>轉(zhuǎn)儲(chǔ)文件問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
使用C++實(shí)現(xiàn)Range序列生成器的示例代碼
在C++編程中,經(jīng)常需要迭代一系列數(shù)字或其他可迭代對象,本文將使用C++來實(shí)現(xiàn)一個(gè)簡單的Range封裝,文中的示例代碼講解詳細(xì),感興趣的可以了解下2023-11-11
C/C++中g(shù)etline函數(shù)案例總結(jié)
這篇文章主要介紹了C/C++中g(shù)etline函數(shù)案例總結(jié),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09
C語言如何實(shí)現(xiàn)一些算法或者函數(shù)你知道嗎
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)一些算法或者函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-03-03

