C語言指針入門的簡單實例教程
c語言的指針的存在使得c語言對硬件的操控,以及靈活性得到了極大的提高。
但是指針的使用存在著很多難點問題。
#include<stdlib.h> #include<stdio.h> //這里的函數(shù)是指針做參數(shù)的例子,要知道這個特性可以彌補c語言只能有一個返回值的特性。 void swap1(int *pa,int *pb){ int t =*pa; *pa=*pb; *pb=t; } //main()函數(shù)必須要返回一個數(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; }
這里我們先定義兩個整型的變量a,b
然后再定義一個臨時的指針變量,用來存儲中間變量
然后將b的變量的內(nèi)存地址賦值給t,注意這里 t 代表的是內(nèi)存地址
然后把b的值給a,再用b接受t地址所存儲的變量, 注意這里的*t是指t這個地址所指的那個變量。
指針與數(shù)組
其實數(shù)組的int a[10];
里來說a其實是這個數(shù)組的第一個元素的a[0]的指針
所以數(shù)組變量本身就是表達地址,所以
int a[10]; int *p=a; //無需用&取地址 但是數(shù)組的單元表達的是變量,需要用&取地址 a==&a[0]; []運算符可以對數(shù)組做,也可以對指針做: p[0] <==>a[0]; 這里的p[0]相當于*p *a可以表示a[0] 數(shù)組變量是const的指針
const 這個修飾符的作用就是表明一個變量是指定的值不能改變了
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; 這句是不能通過編譯的,因為這個指針是不能指向其他位置的地址 //執(zhí)行成功說明這里的指針變量是可以被改變的 ls=36 ; printf("\n%d",*q); //然后我們來看另外一種情況 int P1=10; int P2=20; int const *T=&P1; T=&P2;//執(zhí)行結(jié)果為30 //*T =15;這里是不能通過編譯的,因為這個指針指向的位置存儲的變量是不能賦值改變的。 P2=30; printf("\n%d",*T); //關(guān)鍵在于這里的const是在*的前面還是后面決定的 return 0;
void mai(const int*p){ int *ls=*p; printf("ls的地址:%p",ls); } 這里我們傳入了一個指針,但是在函數(shù)里,是不能改變這個指針所指向的值的
指針的運算
#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));//這里兩個地址做差其實是地址差/類型所占的位數(shù) int *p; p=&i; *p++;//實際上是*(p++);++優(yōu)先級比*高;數(shù)組遍歷 printf("\n*p:%d",*p); return 0; }
指針的類型轉(zhuǎn)換
void*表示不知道指向什么東西的指針
指針變量的大小是相同的但是,指針是有類型的差別
總之指針的作用
1、需要傳入較大的數(shù)據(jù)的時候用做參數(shù)
2、傳入數(shù)組后對數(shù)組做操作
3、函數(shù)返回的結(jié)果不止一個的時候可以用指針帶出(c只能return一個變量,或者值)
需要要用函數(shù)來修改不止一個變量
4、動態(tài)申請內(nèi)存.......
具體的后續(xù)會更。
總結(jié)
到此這篇關(guān)于C語言指針入門的簡單實例的文章就介紹到這了,更多相關(guān)c語言指針實例內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!