c語言指標概念問題,C語言指標問題(初學者)

時間 2021-11-04 23:15:38

1樓:百度文庫精選

內容來自使用者:維旺(精選)

2樓:匿名使用者

沒有那麼複雜,從彙編或者計算機原理層面,反而更用不到型別,那裡只有地址和偏移。

定義變數,無法是兩個要素,型別和變數名,型別讓編譯器知道可以做哪些運算和如何計算;

變數名讓編譯器做成一個名字和地址的對應,以便把後面作用域內所有的p,都翻譯成這個地址。

所以,沒有那麼糾結了,型別是int *,變數名是p,*p是表示式,並且是一個左值表示式,就是說可以被賦值,你可以寫*p = ***;這樣的語句,這樣*p就有了整體看待成一個int的基礎。

3樓:

我把我的理解跟你說下吧。

int *p;  //在定義(或者宣告)指標變數時,變數p前面的“*”只是用來說明變數p是個指標變數而不是一個整型變數,int是指這個指標變數指向的是int型別的記憶體地址,指標本質上就是地址,任何型別的指標變數在記憶體中都是佔用4個位元組的儲存空間的(即32位二進位制數),既然指標變數存放的地址值都是32位的,那為什麼還要區分型別呢?這是為了方便指標變數的運算。舉例說明,

int *pn; //定義了一個指向整型的指標變數

char *str; //定義了一個指向字元型的指標變數

//假設,pn和str的初始值都是0x1000

pn++; //pn自增加1,pn的值為0x1004,因為int型別是佔4個位元組的,指向了下一個int型別的記憶體首地址

str++; //str自增加1,str的值為0x1001,因為char型別是佔1個位元組的,指向了下一個char型別的記憶體首地址

那麼,從上面的例子,我們就可以知道,指標變數前面加上型別,是為了方便指向該型別的變數的記憶體空間,那麼就可以通過該型別的指標變數來訪問它所指向的記憶體空間的資料。

int*型別的含義是:變數p是指標變數名,而不是*p這個整體,*在定義指標變數的時候只是起說明的作用,int*不是一個整體,這點你要記住,說p是int*型指標,是為了方便而簡寫的形式,這裡的*只起一個標記說明的作用而已,每定義一個int型別的指標變數,前面都要加*。

int *p,*q;  //定義了兩個指向整型變數的指標變數

int *p,q;  //p是指標變數,而q是普通的變數

希望對你理解有所幫助吧。

c語言指標問題(初學者)

4樓:百度網友

1.概念問題:指標是指存放地址值的變數或常量;指標與一般變數或常量的區別,在於它不直接儲存數值,而是存放被儲存數值的地址,屬於間接存放,所以不少初學者感覺學習困難。

比如:int a=2,b,c,*ptr; ptr=&a;表示將指標ptr指向變數a,存放a的地址,假設是2000h,而指標變數ptr本身也要有地址,假設是3000h,明顯 ptr和&ptr是不相等的,千萬不要搞混。常見用法:

ptr=&a; 指標ptr指向變數a

b=*ptr; 將ptr所指內容存入b,b=a

c=&ptr; 將ptr地址存入c,c與&a或&b明顯不同

2. *問題:*在指標部分有兩種用法,一是定義指標變數,比如 char *p;二是表示取指標變數所指的內容,比如char ch,*p; *p=ch;

&問題:&指取變數地址,比如 p=&ch;將指標指向ch,即p的值=ch變數的地址

3.指標與陣列問題:陣列的名字本身代表該陣列的首地址,要區分地址與數值之間的關係,比如char c[10], *p;

(1)p=c;表示指標p指向陣列c,相當於p=&c[0];c和&c[0]都是表示首地址

(2)c[0],c[1],...c[9]都是表示陣列中每個具體變數的值,前面加&才是其地址,與指標相連時,一般是p=&c[1]形式,只有指向c[0]時,才能省略為p=c

4.還有一些複雜的指標應用,比如指向指標的指標,或者指向函式的指標,那些更復雜,二級考試中很複雜的一般考的不多,建議將基本的學習好;這個東西要靠自己慢慢理解,理解了,其實簡單,不理解,很難,呵呵。

寫了不少,希望能對你的學習有所幫助,不對的地方,請海涵!

5樓:娛樂文風

30分鐘徹底學會c語言指標

6樓:匿名使用者

可以理解是相反的關係,&是取地址,而*是取地址裡的數,定義char *p ,就是定義了一個指標變數,它是專門用來存地址的,p=&a[2], 就是先取陣列第三個元素的地址,然後賦給p,*p=&a[2],不對哦,兩邊型別不一樣,*p是一個數值,就是取指標p地址裡面的數,而&a[2]是取第三個元素的地址,所以不能賦值哦。呵呵,指標這個比較複雜,你可以先看一下,譚浩強的c語言書,漫漫就會學會的

7樓:匿名使用者

c中的指標算是最難的一塊了。建議朋友指標和陣列一起學習。會更容易些。

8樓:邏輯錯誤

看看王爽的《組合語言》吧.

裡面講的很清楚.

可以這樣理解( 個人理解 ),任何一個變數都是一個地址.比如:0x12ff84等等.

以你的題目為例,

(注意:)p是一個地址,這裡p=&a[2], 那麼p的地址就是a[2]的地址.

(注意:)*p=&a[2]就是p的地址裡面的值是a[2]的地址.

(警告:)這裡p的地址,p的地址可以是任何一個變數的值.比如:

p=&a[2].如果你不給它值,那麼他就是個隨機的值,瞎雞b亂指,愛指哪兒就是哪兒.*p就不一樣了,*p=&a[2]就是系統給你的一個可以用的地址,裡面存的是a[2]的地址所擁有的值.

c語言指標的概念

9樓:匿名使用者

指標是c語言中廣泛使用的一種資料型別。 運用指標程式設計是c語言最主要的風格之一。利用指標變數可以表示各種資料結構; 能很方便地使用陣列和字串; 並能象組合語言一樣處理記憶體地址,從而編出精練而高效的程式。

指標極大地豐富了c語言的功能。 學習指標是學習c語言中最重要的一環, 能否正確理解和使用指標是我們是否掌握c語言的一個標誌。同時, 指標也是c語言中最為困難的一部分,在學習中除了要正確理解基本概念,還必須要多程式設計,上機除錯。

只要作到這些,指標也是不難掌握的。

指標的基本概念 在計算機中,所有的資料都是存放在儲存器中的。 一般把儲存器中的一個位元組稱為一個記憶體單元, 不同的資料型別所佔用的記憶體單元數不等,如整型量佔2個單元,字元量佔1個單元等, 在第二章中已有詳細的介紹。為了正確地訪問這些記憶體單元, 必須為每個記憶體單元編上號。

根據一個記憶體單元的編號即可準確地找到該記憶體單元。記憶體單元的編號也叫做地址。 既然根據記憶體單元的編號或地址就可以找到所需的記憶體單元,所以通常也把這個地址稱為指標。

記憶體單元的指標和記憶體單元的內容是兩個不同的概念。 可以用一個通俗的例子來說明它們之間的關係。我們到銀行去存取款時, 銀行工作人員將根據我們的帳號去找我們的存款單, 找到之後在存單上寫入存款、取款的金額。

在這裡,帳號就是存單的指標, 存款數是存單的內容。對於一個記憶體單元來說,單元的地址即為指標, 其中存放的資料才是該單元的內容。在c語言中, 允許用一個變數來存放指標,這種變數稱為指標變數。

因此, 一個指標變數的值就是某個記憶體單元的地址或稱為某記憶體單元的指標。圖中,設有字元變數c,其內容為“k”(ascii碼為十進位制數 75),c佔用了011a號單元(地址用十六進數表示)。設有指標變數p,內容為011a, 這種情況我們稱為p指向變數c,或說p是指向變數c的指標。

嚴格地說,一個指標是一個地址, 是一個常量。而一個指標變數卻可以被賦予不同的指標值,是變。 但在常把指標變數簡稱為指標。

為了避免混淆,我們中約定:“指標”是指地址, 是常量,“指標變數”是指取值為地址的變數。 定義指標的目的是為了通過指標去訪問記憶體單元。

既然指標變數的值是一個地址, 那麼這個地址不僅可以是變數的地址, 也可以是其它資料結構的地址。在一個指標變數中存放一

個陣列或一個函式的首地址有何意義呢? 因為陣列或函式都是連續存放的。通過訪問指標變數取得了陣列或函式的首地址, 也就找到了該陣列或函式。

這樣一來, 凡是出現陣列,函式的地方都可以用一個指標變數來表示, 只要該指標變數中賦予陣列或函式的首地址即可。這樣做, 將會使程式的概念十分清楚,程式本身也精練,高效。在c語言中, 一種資料型別或資料結構往往都佔有一組連續的記憶體單元。

用“地址”這個概念並不能很好地描述一種資料型別或資料結構, 而“指標”雖然實際上也是一個地址,但它卻是一個資料結構的首地址, 它是“指向”一個資料結構的,因而概念更為清楚,表示更為明確。 這也是引入“指標”概念的一個重要原因。

10樓:匿名使用者

開闢一個地址空間

空間中的內容記錄的是

另一個地址

對他指向的資料進行操作

和直接對變數操作是一個意思

c語言指標基本概念及其指標變數的定義是什麼

11樓:景田不是百歲山

指標是常見間接訪問方式.指標就像一個快捷方式,它指向記憶體的一個地址,可以通過指標就可以間接的訪問到資料。對於計算機,訪問記憶體的方式有兩種,直接訪問和間接訪問。直接訪問通過就是通過變數名稱去訪問。

指標概念是構成c/c++的重要元素之一,是變數的一種型別,存放的是指定型別資料的地址,而同型別變數存放的是資料。

指標變數:就是一個變數,其值是可變的,與整形變數、浮點變數等等的命名規則完全相同。 “指標”是概念,“指標變數”是具體實現。

指標型別說明,即定義變數為一個指標變數; 指標變數名; 變數值(指標)所指向的變數的資料型別。

12樓:有露桑煊

在c語言裡,指標是一組記憶體的頭地址,可以存一個數,一個字元,也可以是一個陣列.

變數,就是像定義一個整型變數一樣的,定義的是一個指標型變數.

13樓:鄲濱田伶

指標是一個其數值為地址的變數(或更一般地說是一個資料物件)。

存放地址的變數稱為指標變數。指標變數是一種特殊的變數,它不同於一般的變數,一般變數存放的是資料本身,而指標變數存放的是資料的地址。

14樓:韶雅容貴瑋

語言中,指標是一種型別,被稱為“指標型別”。指標型別描述的是一個地址,這個地址指向記憶體中另外一個物件的位置。簡單地說,指標表示的是它所指向物件的地址。

1、比較point,*point,&point三者的區別

對於int

*point;

point:是指標變數,其內容是地址量。

*point:是指標變數的目標變數,即指標指向的那個變數,其內容是資料。

&point:是指指標變數本身所佔據的儲存地址。

2、指標與陣列

用指標和陣列名在訪問記憶體中的資料時,他們的表現形式是等價的,因為他們都是地址量。

陣列名錶示整個陣列的首地址,可以看作是固定地址的指標,不能被賦值。

陣列名無須賦初值,而指標在使用前必須賦初值。

3、字元指標和字串

字串是一個字元陣列,字串以‘\0’結束。printf函式的%s格式輸出字元時,是從給定的地址開始,到遇上第一個‘\0’字元時結束。

對字元指標初始化,是將字串的首地址賦給指標。

4、指標型函式

所謂指標型函式,即返回值是指標(地址)的函式。

5、多級指標

指向指標的指標(**p)就是二級指標,指向指標的指標的指標(***p)是3級指標。

多級指標類似於間接定址。

6、指向函式的指標

c語言中的函式名錶示函式的首地址,即函式執行的人口地址。

定義形式:[儲存型別][資料型別標示符](*指向函式的指標變數名)();

例子:int(*fun)();//指向函式的指標

,int

*fun();

//指標型函式,注意(*

fun)括號不能少

7、動態指標

當需要一大片記憶體的時候,最好使用動態分配。

使用malloc函式:void

*malloc(size_t

size)。

例子:int

*pn=malloc(10*sizeof(int));

double

*pd=malloc(10*sizeof(double));