當前位置:首頁 » 編程語言 » c語言指針使用圖解
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言指針使用圖解

發布時間: 2023-03-11 23:08:02

『壹』 c語言 指針方法

#include<stdio.h>

int main()

{

int a,b,c,s[3],t;

int *x,*y,*z;//定義指針變數

x=&a;//將a的地址賦給指針x,下同

y=&b;

z=&c;

scanf("%d%d%d",x,y,z);

s[0]=*x;//將指針x所指向的變數值賦給數組s的第一個元素;依次類推

s[1]=*y;

s[2]=*z;

for(int i=0;i<3;i++)//冒泡排序

for(int j=0;j<3-i-1;j++)

if(s[j]<s[j+1])

{

t=s[j];

s[j]=s[j+1];

s[j+1]=t;

}

for(int i=0;i<3;i++)

printf("%d ",s[i]);

return 0;

}

『貳』 C語言指針/引用/取值

指針是一個存儲計算機內存地址的變數。從指針指向的內存讀取數據稱作指針的取值。指針可以指向某些具體類型的變數地址,例如int、long和double。指針也可以是void類型、NULL指針和未初始化指針。

根據出現的位置不同,操作符  *  既可以用來聲明一個指針變數,也可以用作指針的取值。當用在聲明一個變數時,*表示這里聲明了一個指針。其它情況用到*表示指針的取值。

&是地址操作符,用來引用一個內存地址。通過在變數名字前使用&操作符,我們可以得到該變數的內存地址。

// 聲明一個int指針

int*ptr;

// 聲明一個int值

int  val = 1;

// 為指針分配一個int值的引用

ptr = &val;

// 對指針進行取值,列印存儲在指針地址中的內容

int deref = *ptr;

printf("%d\n", deref);

第2行,我們通過*操作符聲明了一個int指針。接著我們聲明了一個int變數並賦值為1。然後我們用int變數的地址初始化我們的int指針。接下來對int指針取值,用變數的內存地址初始化int指針。最終,我們列印輸出變數值,內容為1。

第6行的&val是一個引用。在val變數聲明並初始化內存之後,通過在變數名之前使用地址操作符&我們可以直接引用變數的內存地址。

第8行,我們再一次使用*操作符來對該指針取值,可直接獲得指針指向的內存地址中的數據。由於指針聲明的類型是int,所以取到的值是指針指向的內存地址存儲的int值。

說穿了,指針就是地址吧,這里可以把指針、引用和值的關系類比為信封、郵箱地址和房子。一個指針就好像是一個信封,我們可以在上面填寫郵寄地址。一個引用(地址)就像是一個郵件地址,它是實際的地址。取值就像是地址對應的房子。我們可以把信封上的地址擦掉,寫上另外一個我們想要的地址,但這個行為對房子沒有任何影響。

『叄』 c語言指針詳解

指針是一個特殊的變數,它裡面存儲的數值被解釋成為內存里的一個地址。數據在內存中的地址也稱為指針,如果一個變數存儲了一份數據的指針,我們就稱它為指針變數。

計算機中所有的數據都必須放在內存中,不同類型的數據佔用的位元組數不一樣,例如 int 佔用 4 個位元組,char 佔用 1 個位元組。

為了正確地訪問這些數據,必須為每個位元組都編上號碼,就像門牌號、身份證號一樣,每個位元組的編號是唯一的,根據編號可以准確地找到某個位元組。

C語言用變數來存儲數據,用函數來定義一段可以重復使用的代碼,它們最終都要放到內存中才能供 CPU 使用。數據和代碼都以二進制的形式存儲在內存中,計算機無法從格式上區分某塊內存到底存儲的是數據還是代碼。

當程序被載入到內存後,操作系統會給不同的內存塊指定不同的許可權,擁有讀取和執行許可權的內存塊就是代碼,而擁有讀取和寫入許可權(也可能只有讀取許可權)的內存塊就是數據。

CPU 只能通過地址來取得內存中的代碼和數據,程序在執行過程中會告知 CPU 要執行的代碼以及要讀寫的數據的地址。

如果程序不小心出錯,或者開發者有意為之,在 CPU 要寫入數據時給它一個代碼區域的地址,就會發生內存訪問錯誤。這種內存訪問錯誤會被硬體和操作系統攔截,強製程序崩潰,程序員沒有挽救的機會。

變數名和函數名為我們提供了方便,讓我們在編寫代碼的過程中可以使用易於閱讀和理解的英文字元串,不用直接面對二進制地址,那場景簡直讓人崩潰。

需要注意的是,雖然變數名、函數名、字元串名和數組名在本質上是一樣的,它們都是地址的助記符,但在編寫代碼的過程中,我們認為變數名表示的是數據本身,而函數名、字元串名和數組名表示的是代碼塊或數據塊的首地址。

(3)c語言指針使用圖解擴展閱讀

指針使用(* 和 &

*&a可以理解為*(&a),&a表示取變數 a 的地址(等價於 pa),*(&a)表示取這個地址上的數據(等價於 *pa),繞來繞去,又回到了原點,*&a仍然等價於 a。

&*pa可以理解為&(*pa),*pa表示取得 pa 指向的數據(等價於 a),&(*pa)表示數據的地址(等價於 &a),所以&*pa等價於 pa。

對星號*的總結

在我們目前所學到的語法中,星號*主要有三種用途:

1、表示乘法,例如int a = 3, b = 5, c; c = a * b;,這是最容易理解的。

2、表示定義一個指針變數,以和普通變數區分開,例如int a = 100; int *p = &a;。

3、表示獲取指針指向的數據,是一種間接操作,例如int a, b, *p = &a; *p = 100; b = *p;。

『肆』 論述C語言中指針的概念和作用,並舉例說明

1、指針概念:變數的地址(計算機內存位元組的編號)叫做指針,存放變數地址的變數叫指針變
量,
簡言之,指針是用來存放地址的。
2、作用:指向這個變數或數組的首地址,是變數的間接引用方式。其值如果改變,變數的值或數組元素的值也會跟著改變。程序對變數的操作實際上是對變數所在的存儲空間讀取和寫入數據。方便對變數的操作。
舉例說明:
int
a=3;/*定義一個整型變數a,並賦初值3*/
int
*p;/*定義一個指針變數P*/
p=&a;/*讓p指向a的首地址,也就是a的地址*/
程序為a分配一個2個位元組的存儲單元,假如2個位元組的地址分別為(ABCD1和ABCD2,唯一),那麼p裡面放的值就是ABCD1,不是3。這時可通過p直接引用a,實際上*p=3。以後不管a存放在內存中的哪個地方,只用通過調用p就可以引用a。這時如果令*p=4,則最後的a值也為4。對於數組,指針是指向數組的首地址。

『伍』 c語言指針簡單教程

指針是C語言中廣泛使用的一種數據類型。 運用指針編程是C語言最主要的風格之一。利用指針變數可以表示各種數據結構; 能很方便地使用數組和字元串; 並能象匯編語言一樣處理內存地址,從而編出精練而高效的程序。指針極大地豐富了C語言的功能。 學習指針是學習C語言中最重要的一環, 能否正確理解和使用指針是我們是否掌握C語言的一個標志。同時, 指針也是C語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多編程,上機調試。只要作到這些,指針也是不難掌握的。

指針的基本概念 在計算機中,所有的數據都是存放在存儲器中的。 一般把存儲器中的一個位元組稱為一個內存單元, 不同的數據類型所佔用的內存單元數不等,如整型量佔2個單元,字元量佔1個單元等, 在第二章中已有詳細的介紹。為了正確地訪問這些內存單元, 必須為每個內存單元編上號。 根據一個內存單元的編號即可准確地找到該內存單元。內存單元的編號也叫做地址。 既然根據內存單元的編號或地址就可以找到所需的內存單元,所以通常也把這個地址稱為指針。 內存單元的指針和內存單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關系。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。在這里,帳號就是存單的指針, 存款數是存單的內容。對於一個內存單元來說,單元的地址即為指針, 其中存放的數據才是該單元的內容。在C語言中, 允許用一個變數來存放指針,這種變數稱為指針變數。因此, 一個指針變數的值就是某個內存單元的地址或稱為某內存單元的指針。圖中,設有字元變數C,其內容為「K」(ASCII碼為十進制數 75),C佔用了011A號單元(地址用十六進數表示)。設有指針變數P,內容為011A, 這種情況我們稱為P指向變數C,或說P是指向變數C的指針。 嚴格地說,一個指針是一個地址, 是一個常量。而一個指針變數卻可以被賦予不同的指針值,是變。 但在常把指針變數簡稱為指針。為了避免混淆,我們中約定:「指針」是指地址, 是常量,「指針變數」是指取值為地址的變數。 定義指針的目的是為了通過指針去訪問內存單元。

既然指針變數的值是一個地址, 那麼這個地址不僅可以是變數的地址, 也可以是其它數據結構的地址。在一個指針變數中存放一
個數組或一個函數的首地址有何意義呢? 因為數組或函數都是連續存放的。通過訪問指針變數取得了數組或函數的首地址, 也就找到了該數組或函數。這樣一來, 凡是出現數組,函數的地方都可以用一個指針變數來表示, 只要該指針變數中賦予數組或函數的首地址即可。這樣做, 將會使程序的概念十分清楚,程序本身也精練,高效。在C語言中, 一種數據類型或數據結構往往都佔有一組連續的內存單元。 用「地址」這個概念並不能很好地描述一種數據類型或數據結構, 而「指針」雖然實際上也是一個地址,但它卻是一個數據結構的首地址, 它是「指向」一個數據結構的,因而概念更為清楚,表示更為明確。 這也是引入「指針」概念的一個重要原因。

指針變數的類型說明

對指針變數的類型說明包括三個內容:
(1)指針類型說明,即定義變數為一個指針變數;
(2)指針變數名;
(3)變數值(指針)所指向的變數的數據類型。
其一般形式為: 類型說明符 *變數名;
其中,*表示這是一個指針變數,變數名即為定義的指針變數名,類型說明符表示本指針變數所指向的變數的數據類型。
例如: int *p1;表示p1是一個指針變數,它的值是某個整型變數的地址。 或者說p1指向一個整型變數。至於p1究竟指向哪一個整型變數, 應由向p1賦予的地址來決定。
再如:
staic int *p2; /*p2是指向靜態整型變數的指針變數*/
float *p3; /*p3是指向浮點變數的指針變數*/
char *p4; /*p4是指向字元變數的指針變數*/ 應該注意的是,一個指針變數只能指向同類型的變數,如P3 只能指向浮點變數,不能時而指向一個浮點變數, 時而又指向一個字元變數。

指針變數的賦值

指針變數同普通變數一樣,使用之前不僅要定義說明, 而且必須賦予具體的值。未經賦值的指針變數不能使用, 否則將造成系統混亂,甚至死機。指針變數的賦值只能賦予地址, 決不能賦予任何其它數據,否則將引起錯誤。在C語言中, 變數的地址是由編譯系統分配的,對用戶完全透明,用戶不知道變數的具體地址。 C語言中提供了地址運算符&來表示變數的地址。其一般形式為: & 變數名; 如&a變示變數a的地址,&b表示變數b的地址。 變數本身必須預先說明。設有指向整型變數的指針變數p,如要把整型變數a 的地址賦予p可以有以下兩種方式:
(1)指針變數初始化的方法 int a;
int *p=&a;
(2)賦值語句的方法 int a;
int *p;
p=&a;
不允許把一個數賦予指針變數,故下面的賦值是錯誤的: int *p;p=1000; 被賦值的指針變數前不能再加「*」說明符,如寫為*p=&a 也是錯誤的

指針變數的運算

指針變數可以進行某些運算,但其運算的種類是有限的。 它只能進行賦值運算和部分算術運算及關系運算。
1.指針運算符

(1)取地址運算符&
取地址運算符&是單目運算符,其結合性為自右至左,其功能是取變數的地址。在scanf函數及前面介紹指針變數賦值中,我們已經了解並使用了&運算符。

(2)取內容運算符*
取內容運算符*是單目運算符,其結合性為自右至左,用來表示指針變數所指的變數。在*運算符之後跟的變數必須是指針變數。需要注意的是指針運算符*和指針變數說明中的指針說明符* 不是一回事。在指針變數說明中,「*」是類型說明符,表示其後的變數是指針類型。而表達式中出現的「*」則是一個運算符用以表示指針變數所指的變數。
main(){
int a=5,*p=&a;
printf ("%d",*p);
}
......
表示指針變數p取得了整型變數a的地址。本語句表示輸出變數a的值。
2.指針變數的運算

(1)賦值運算

指針變數的賦值運算有以下幾種形式:
①指針變數初始化賦值,前面已作介紹。

②把一個變數的地址賦予指向相同數據類型的指針變數。例如:
int a,*pa;
pa=&a; /*把整型變數a的地址賦予整型指針變數pa*/

③把一個指針變數的值賦予指向相同類型變數的另一個指針變數。如:
int a,*pa=&a,*pb;
pb=pa; /*把a的地址賦予指針變數pb*/
由於pa,pb均為指向整型變數的指針變數,因此可以相互賦值。

④把數組的首地址賦予指向數組的指針變數。
例如: int a[5],*pa;
pa=a; (數組名表示數組的首地址,故可賦予指向數組的指針變數pa)
也可寫為:
pa=&a[0]; /*數組第一個元素的地址也是整個數組的首地址,
也可賦予pa*/
當然也可採取初始化賦值的方法:
int a[5],*pa=a;

⑤把字元串的首地址賦予指向字元類型的指針變數。例如: char *pc;pc="c language";或用初始化賦值的方法寫為: char *pc="C Language"; 這里應說明的是並不是把整個字元串裝入指針變數, 而是把存放該字元串的字元數組的首地址裝入指針變數。 在後面還將詳細介紹。

⑥把函數的入口地址賦予指向函數的指針變數。例如: int (*pf)();pf=f; /*f為函數名*/

(2)加減算術運算

對於指向數組的指針變數,可以加上或減去一個整數n。設pa是指向數組a的指針變數,則pa+n,pa-n,pa++,++pa,pa--,--pa 運算都是合法的。指針變數加或減一個整數n的意義是把指針指向的當前位置(指向某數組元素)向前或向後移動n個位置。應該注意,數組指針變數向前或向後移動一個位置和地址加1或減1 在概念上是不同的。因為數組可以有不同的類型, 各種類型的數組元素所佔的位元組長度是不同的。如指針變數加1,即向後移動1 個位置表示指針變數指向下一個數據元素的首地址。而不是在原地址基礎上加1。
例如:
int a[5],*pa;
pa=a; /*pa指向數組a,也是指向a[0]*/
pa=pa+2; /*pa指向a[2],即pa的值為&pa[2]*/ 指針變數的加減運算只能對數組指針變數進行, 對指向其它類型變數的指針變數作加減運算是毫無意義的。(3)兩個指針變數之間的運算只有指向同一數組的兩個指針變數之間才能進行運算, 否則運算毫無意義。

①兩指針變數相減
兩指針變數相減所得之差是兩個指針所指數組元素之間相差的元素個數。實際上是兩個指針值(地址) 相減之差再除以該數組元素的長度(位元組數)。例如pf1和pf2 是指向同一浮點數組的兩個指針變數,設pf1的值為2010H,pf2的值為2000H,而浮點數組每個元素佔4個位元組,所以pf1-pf2的結果為(2000H-2010H)/4=4,表示pf1和 pf2之間相差4個元素。兩個指針變數不能進行加法運算。 例如, pf1+pf2是什麼意思呢?毫無實際意義。

②兩指針變數進行關系運算
指向同一數組的兩指針變數進行關系運算可表示它們所指數組元素之間的關系。例如:
pf1==pf2表示pf1和pf2指向同一數組元素
pf1>pf2表示pf1處於高地址位置
pf1<pf2表示pf2處於低地址位置
main(){
int a=10,b=20,s,t,*pa,*pb;
pa=&a;
pb=&b;
s=*pa+*pb;
t=*pa**pb;
printf("a=%d\nb=%d\na+b=%d\na*b=%d\n",a,b,a+b,a*b);
printf("s=%d\nt=%d\n",s,t);
}
......
說明pa,pb為整型指針變數
給指針變數pa賦值,pa指向變數a。
給指針變數pb賦值,pb指向變數b。
本行的意義是求a+b之和,(*pa就是a,*pb就是b)。
本行是求a*b之積。
輸出結果。
輸出結果。
......
指針變數還可以與0比較。設p為指針變數,則p==0表明p是空指針,它不指向任何變數;p!=0表示p不是空指針。空指針是由對指針變數賦予0值而得到的。例如: #define NULL 0int *p=NULL; 對指針變數賦0值和不賦值是不同的。指針變數未賦值時,可以是任意值,是不能使用的。否則將造成意外錯誤。而指針變數賦0值後,則可以使用,只是它不指向具體的變數而已。
main(){
int a,b,c,*pmax,*pmin;
printf("input three numbers:\n");
scanf("%d%d%d",&a,&b,&c);
if(a>b){
pmax=&a;
pmin=&b;}
else{
pmax=&b;
pmin=&a;}
if(c>*pmax) pmax=&c;
if(c<*pmin) pmin=&c;
printf("max=%d\nmin=%d\n",*pmax,*pmin);
}
......
pmax,pmin為整型指針變數。
輸入提示。
輸入三個數字。
如果第一個數字大於第二個數字...
指針變數賦值
指針變數賦值

指針變數賦值
指針變數賦值
判斷並賦值
判斷並賦值
輸出結果
......

『陸』 C語言中指針的用法介紹(2)

如果上例中,ptr是被減去5,那麼處理過程大同小異,只不過ptr的值是被減去5乘 sizeof(int),新的ptr指向的地址將比原來的ptr所指向的地址向低地址方向移動了20個位元組。

總結一下,一個指針ptrold加上一個整數 n後,結果是一個新的指針ptrnew,

ptrnew的類型和ptrold的類型相同,ptrnew所指向的類型和ptrold所指向的類型也相同。ptrnew的值將比ptrold的值增加了 n乘sizeof(ptrold所指向的類型)個位元組。就是說,ptrnew所指向的內存區將比ptrold所指向的內存區向高地址方向移動了 n乘 sizeof(ptrold所指向的類型)個位元組。

一個指針ptrold減去一個整數 n後,結果是一個新的指針ptrnew,ptrnew的類型和ptrold的類型相同,ptrnew所指向的類型和ptrold所指向的類型也相同。ptrnew的值將比ptrold的值減少了 n乘 sizeof(ptrold所指向的類型)個位元組,就是說, ptrnew所指向的內存區將比ptrold所指向的內存區向低地址方向移動了n乘sizeof(ptrold所指向的類型)個位元組。

第三章。運算?amp;和*

這里&是取地址運算符,*是...書上叫做"間接運算符"。

&a的運算結果是一個指針,指針的類型是 a的類型加個*,指針所指向的類型是a的類型,指針所指向的地址嘛,那就是a 的地址。*p的運算結果就五花八門了。總之*p的結果是p所指向的東西,這個東西有這些特點:它的類型是p指向的類型,它所佔用的地址是p所指向的地址。

例五:

int a=12;

int b;

int *p;

int **ptr;

Generated by Foxit PDF Creator ? Foxit Software

http://www.foxitsoftware.com For evaluation only.p=&a;//&a的結果是一個指針,類型是 int*,指向的類型是 int,指向的地址是a的地址。*p=24;//*p的結果,在這里它的類型是 int,它所佔用的地址是p所指向的地址,顯然,*p就是變數a。ptr=&p;//&p的結果是個指針,該指針的類型是p的類型加個*,在這里是 int**。該指針所指向的類型是p的類型,這里是 int*。該指針所指向的地址就是指針p自己的地址。

*ptr=&b;//*ptr是個指針,&b的結果也是個指針,且這兩個指針的類型和所指向的類型是一樣的,所以用&b來給*ptr賦值就是毫無問題的了。**ptr=34;//*ptr的結果是ptr所指向的東西,在這里是一個指針,對這個指

針再做一次*運算,結果就是一個 int 類型的變數。

第四章。指針表達式。

一個表達式的最後結果如果是一個指針,那麼這個表達式就叫指針表達式。

下面是一些指針表達式的例子:

例六:

int a,b;

int array[10];

int *pa;

pa=&a;//&a是一個指針表達式。

int **ptr=&pa;//&pa也是一個指針表達式。

*ptr=&b;//*ptr和&b都是指針表達式。

pa=array;

pa++;//這也是指針表達式。

例七:

char *arr[20];

char **parr=arr;//如果把arr 看作指針的話,arr 也是指針表達式

char *str;

str=*parr;//*parr 是指針表達式

str=*(parr+1);//*(parr+1)是指針表達式

str=*(parr+2);//*(parr+2)是指針表達式

由於指針表達式的結果是一個指針,所以指針表達式也具有指針所具有的四個要素:指針的類型,指針所指向的類型,指針指向的內存區,指針自身占據的內存。

好了,當一個指針表達式的結果指針已經明確地具有了指針自身占據的內存的話,這個指針表達式就是一個左值,否則就不是一個左值。

在例七中,&a不是一個左值,因為它還沒有占據明確的內存。*ptr是一個左值,因為*ptr 這個指針已經占據了內存,其實*ptr 就是指針 pa,既然 pa 已經在內存中有了自己的位置,那麼*ptr當然也有了自己的位置。

第五章。數組和指針的關系

Generated by Foxit PDF Creator ? Foxit Software

http://www.foxitsoftware.com For evaluation only.如果對聲明數組的語句不太明白的話,請參閱我前段時間貼出的文?lt;<如何理解c 和c++的復雜類型聲明>>。數組的數組名其實可以看作一個指針。看下例:

例八:

int array[10]={0,1,2,3,4,5,6,7,8,9},value;

...

...

value=array[0];//也可寫成:value=*array;

value=array[3];//也可寫成:value=*(array+3);

value=array[4];//也可寫成:value=*(array+4);

上例中,一般而言數組名array代表數組本身,類型是 int [10],但如果把array看做指針的話,它指向數組的第 0個單元,類型是 int *,所指向的類型是數組單元的類型即 int。因此*array等於 0 就一點也不奇怪了。同理,array+3 是一個指向數組第3個單元的指針,所以*(array+3)等於3。其它依此類推。

例九:

例九:

char *str[3]={

"Hello,this is a sample!",

"Hi,good morning.",

"Hello world"

};

char s[80];

strcpy(s,str[0]);//也可寫成strcpy(s,*str);

strcpy(s,str[1]);//也可寫成strcpy(s,*(str+1));

strcpy(s,str[2]);//也可寫成strcpy(s,*(str+2));

上例中,str是一個三單元的數組,該數組的每個單元都是一個指針,這些指針各指向一個字元串。把指針數組名 str 當作一個指針的話,它指向數組的第 0號單元,它的類型是char**,它指向的類型是char *。
*str也是一個指針,它的類型是char*,它所指向的類型是char,它指向的地址是字元串"Hello,this is a sample!"的第一個字元的地址,即’H’的地址。

『柒』 C語言指針的用法

void inv(int *x,int n) // x表示一個int的指針,或者int類型的數組,n表示一個int變數,從參數上看,可能x是數組,n是數組大小
{
int *p,temp,*i,*j,m=(n-1)/2;//變數定義,p,i,j,都是指針,temp,m,都是變數
i=x;j=x+n-1;p=x+m;// 給指針i,j,p賦值,讓i指向數組x的第一個元素,j指向x的最後一個元素,p為x的中間的元素
for(;i<=p;i++,j--) // 循環 從 第一個元素開始,到中間的元素結束,
{temp=*i;*i=*j;*j=temp;}
交換 第z個元素和倒數第z個元素,典型的交換演算法,z表示i每次循環所指向的數字的索引
return;
}

『捌』 C語言中指針有哪些用處。或者可以用來做什麼,請簡單舉例說明

指針可以快速訪問數組中的元素,想訪問下一個,就自加1,上一個就自減1,下一行就自加一行,上一行就自減一行,特別適用快速逐點處理圖像,
如:unsigned char img[1024][768],*p; int i,j; p=(unsigned char *)img; for ( i=0;i<1024;i++) for ( j=0;j<768;j++,p++ ) *p+=16;
指針還可以用不同類型來訪問同一組數據:
unsigned char a[4],*p; unsigned int *q; p=a; *p=0x12; p++; *p=0x34; p++; *p=0x56; p++; *p=0x78; q=(unsigned int *)a; printf("%xH",*q);會輸出十六進制數78563412H
另外指針可以用於給函數傳遞數組起始地址、結構地址、類地址、結構數組地址,這些復雜數據組合,函數返回值也是這樣,另外利用指針還能不從數組起始地址開始傳入數組。比如:char str[]; scanf("%s",str); printf("%s\n",str+1);

『玖』 C語言指針怎麼用

在c語言中.指針被用來表示內存單元的地址,如果把這個地址用一個變數來保存,則
這種變數就稱為指針變數。指針變數也分別有不同的類型,用來保存不同類型變數的地址。
嚴格地說.指針與指針變數是不同的,為了敘述方便,常常把指針變數就稱為指針。
內存是計算機用於存儲數據的存儲器,以位元組作為存儲單元.為了能正確的訪問內存單
元,必須為每一個內存單元編號,這個編號就稱為該單元的地址。如果將一個旅店比喻成內
存,則旅店的房間就是內存單元,房間號碼就是該單元的地址。
指針變數定義格式:
[存儲類型]
數據類型
*指針變數名[=初始值]
指針變數一旦定義,必須採用賦值的方式將其與某個變數實體相聯系,才能使用。指針
變數的賦值方式:
指針變數名;&普通變數名;