日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C语言指针操作(一)指针变量

發(fā)布時間:2024/1/1 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言指针操作(一)指针变量 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

學(xué)習(xí)的最大理由是想擺脫平庸,早一天就多一份人生的精彩;遲一天就多一天平庸的困擾。?

學(xué)習(xí)日記

目錄

學(xué)習(xí)日記

前言

一、指針的概念

二、指針變量

注意

1、怎樣定義指針變量?

2、怎樣引用指針變量?

?注意

例?

3、指針變量作為函數(shù)參數(shù)

例 1

例2?

?C語言指針操作


前言

????????指針這里分為八個小部分,分別是“指針變量”、“通過指針引用數(shù)組”、“*通過指針引用多維數(shù)組”、“通過指針引用字符串”、“*指向函數(shù)的指針”、“*返回指針值的函數(shù)”、“*指針數(shù)組和多重指針”、“*動態(tài)內(nèi)存分配與指向它的指針變量” 。

一、指針的概念

????????如果在程序中定義了一個變量,在對程序進行編譯時,系統(tǒng)就會給這個變量分配內(nèi)存單元。編譯系統(tǒng)根據(jù)程序中定義的變量類型,分配一定長度的空間。內(nèi)存區(qū)的每一個字節(jié)有一個編號,這就是“地址”。

????????由于通過地址能找到所需的變量單元,可以說,地址指向該變量單元,將地址形象化地稱為“指針”。

????????C語言中的地址包括位置信息(內(nèi)存編號,或稱純地址)和它所指向的數(shù)據(jù)的類型信息,或者說它是“帶類型的地址”。

???????? 存儲單元的地址和存儲單元的內(nèi)容是兩個不同的概念。 在程序中一般是通過變量名來引用變量的值。 直接按變量名進行的訪問,稱為“直接訪問”方式。還可以采用另一種稱為 “間接訪問”的方式,即將變量的地址存放在另一變量(指針變量)中, 然后通過該指針變量來找到對應(yīng)變量的地址,從而訪問變量。

int i=1,j=2,k=3; //設(shè)int變量占2字節(jié)

二、指針變量

? ? ? ??通過指針變量訪問整型變量。

#include <stdio.h> int main() { int a=100,b=10;//定義整型變量a,b,并初始化int *pointer_1,*pointer_2;//定義指向整型數(shù)據(jù)的指針變量pointer_1, pointer_2pointer_1=&a; //把變量a的地址賦給指針變量pointer_1pointer_2=&b; //把變量b的地址賦給指針變量pointer_2 printf("a=%d,b=%d\n",a,b); //輸出變量a和b的值printf("*pointer_1=%d,*pointer_2=%d\n",*pointer_1,*pointer_2);//輸出變量a和b的值return 0; }

?*pointer_1;?? ?//企圖定義pointer_1為指針變量。出錯

int *pointer_1;?? ?//正確,必須指定指針變量的基類型

注意

????????定義指針變量時,左側(cè)應(yīng)有類型名,否則就不是定義指針變量。

1、怎樣定義指針變量?

類型名 *指針變量名;——————int *pointer_1, *pointer_2;

????????左端的int是在定義指針變量時必須指定的“基類型”。指針變量的基類型用來指定此指針變量可以指向的變量的類型。 前面介紹過基本的數(shù)據(jù)類型(如int,char,float等),既然有這些類型的變量,就可以有指向這些類型變量的指針,因此,指針變量是基本數(shù)據(jù)類型派生出來的類型,它不能離開基本類型而獨立存在。

在定義指針變量時要注意:

(1) 指針變量前面的“*”表示該變量為指針型變量。指針變量名則不包含“*”。

(2) 在定義指針變量時必須指定基類型。一個變量的指針的含義包括兩個方面,一是以存儲單元編號表示的純地址(如編號為2000的字節(jié)),一是它指向的存儲單元的數(shù)據(jù)類型(如int,char,float等)。

(3) 如何表示指針類型。指向整型數(shù)據(jù)的指針類型表示為“int *”,讀作“指向int的指針”或簡稱“int指針”。

(4) 指針變量中只能存放地址(指針),不要將一個整數(shù)賦給一個指針變量。?

2、怎樣引用指針變量?

1、給指針變量賦值。

2、 引用指針變量指向的變量。

3、引用指針變量的值。

int a, *p; p=&a; //把a的地址賦給指針變量p ① printf("%d",*p); //以整數(shù)形式輸出指針變量p所指向的變量的值,即a的值 ② *p=1; //將整數(shù)1賦給p當(dāng)前所指向的變量,由于p指向變量a,相當(dāng)于把1賦給a,即a=1 ② printf("%o",p); //以八進制形式輸出指針變量p的值,由于p指向a,相當(dāng)于輸出a的地址,即&a ③

?注意

????????要熟練掌握兩個有關(guān)的運算符:

(1) &取地址運算符。&a是變量a的地址。

(2) * 指針運算符(或稱“間接訪問”運算符),*p代表指針變量p指向的對象。

例?

????????輸入a和b兩個整數(shù),按先大后小的順序輸出a和b。

#include <stdio.h> int main() { int *p1,*p2,*p,a,b; //p1,p2的類型是int *類型printf("please enter two integer numbers:");scanf("%d,%d",&a,&b); //輸入兩個整數(shù) p1=&a; //使p1指向變量ap2=&b; //使p2指向變量bif(a<b) //如果a<b{ p=p1;p1=p2;p2=p;} //使p1與p2的值互換printf("a=%d,b=%d\n",a,b); //輸出a,bprintf("max=%d,min=%d\n",*p1,*p2); //輸出p1和p2所指向的變量的值return 0; }

?????????a和b的值并未交換,它們?nèi)员3衷?#xff0c;但p1和p2的值改變了。

????????實際上,第9行可以改為{p1=&b; p2=&a;}即直接對p1和p2賦以新值,這樣可以不必定義中間變量p,使程序更加簡練。

3、指針變量作為函數(shù)參數(shù)

????????函數(shù)的調(diào)用可以(而且只可以)得到一個返回值(即函數(shù)值),而使用指針變量作參數(shù),可以得到多個變化了的值。

?如果想通過函數(shù)調(diào)用得到n個要改變的值,可以這樣做:

1、在主調(diào)函數(shù)中設(shè)n個變量,用n個指針變量指向它們;

2、設(shè)計一個函數(shù),有n個指針形參。在這個函數(shù)中改變這n個形參的值;

3、在主調(diào)函數(shù)中調(diào)用這個函數(shù),在調(diào)用時將這n個指針變量作實參,將它們的值,也就是相關(guān)變量的地址傳給該函數(shù)的形參;

4、在執(zhí)行該函數(shù)的過程中,通過形參指針變量,改變它們所指向的n個變量的值;

5、主調(diào)函數(shù)中就可以使用這些改變了值的變量。

例 1

????????對輸入的兩個整數(shù)按大小順序輸出。(不能企圖通過改變指針形參的值而使指針實參的值改變)

#include <stdio.h> int main() { void swap(int *p1,int *p2);int a,b;int *pointer_1,*pointer_2; //pointer_1,pointer_2是int *型變量printf("please enter two integer numbers:");scanf("%d,%d",&a,&b);pointer_1=&a;pointer_2=&b;if(a<b) swap(pointer_1,pointer_2);//調(diào)用swap函數(shù),用指針變量作實參printf("max=%d,min=%d\n",*pointer_1,*pointer_2);return 0; }void swap(int *p1,int *p2) //形參是指針變量 { int *p;p=p1; //下面3行交換p1和p2的指向p1=p2;p2=p; }

例2?

????????輸入3個整數(shù)a,b,c,要求按由大到小的順序?qū)⑺鼈冚敵觥S煤瘮?shù)實現(xiàn)。

#include <stdio.h> int main() { void exchange(int *q1, int *q2, int *q3); //函數(shù)聲明int a,b,c,*p1,*p2,*p3;printf("please enter three numbers:");scanf("%d,%d,%d",&a,&b,&c);p1=&a;p2=&b;p3=&c;exchange(p1,p2,p3);printf("The order is:%d,%d,%d\n",a,b,c);return 0; }void exchange(int *q1, int *q2, int *q3) //將3個變量的值交換的函數(shù) { void swap(int *pt1, int *pt2); //函數(shù)聲明if(*q1<*q2) swap(q1,q2); //如果a<b,交換a和b的值if(*q1<*q3) swap(q1,q3); //如果a<c,交換a和c的值if(*q2<*q3) swap(q2,q3); //如果b<c,交換b和c的值 }void swap(int *pt1, int *pt2) //交換2個變量的值的函數(shù) { int temp;temp=*pt1; //交換*pt1和*pt2變量的值*pt1=*pt2;*pt2=temp; }

?C語言指針操作

C語言指針操作(一)指針變量

C語言指針操作(二)通過指針引用數(shù)組

C語言指針操作(三)*通過指針引用多維數(shù)組?

C語言指針操作(四)通過指針引用字符串

C語言指針操作(五)*指向函數(shù)的指針

C語言指針操作(六)*返回指針值的函數(shù)?

C語言指針操作(七)*指針數(shù)組和多重指針?

C語言指針操作(八)*動態(tài)內(nèi)存分配與指向它的指針變量

總結(jié)

以上是生活随笔為你收集整理的C语言指针操作(一)指针变量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。