① c語言 程序編程 指針
指針也是一個變數,它也需要進行賦值。指針所存儲的東西不是什麼特別的,猶如普通的整型變數int x ,x可以存放一個整數一樣, 那int *p 的p則可以存放一個內存地址。所以指針變數中所存放的內容就是一個內存地址。
所以經常的做法是將一個「地址」賦值給一個指針變數,那如何取到一個地址呢,C語言中就提供了一個運算符&, 稱該運算符為取地址運算符,它可以獲得一個變數的地址,如int x; 那麼&x就是變數x所在內存單元的地址了。這樣你可以把它賦給一個指針變數即 p = &x; 我們形象的說p指向x,其實就是p的內存單元中存放了變數x的地址。
通過上述的賦值給對於x這個內存單元我就可以有兩種訪問方法,也就是說我有兩種方式使用x
第一種直接法,就是x, 比如我要更改x變數的值,就是更改x所在內存單元中存放的數據,
x=5,就是把5存放到悉喊x所在內存單元。這是很顯然的方式。
第二種間接法,由於之前已經讓一個指針變數p指向的x即p= &x了,所以我可以通過p間接的訪問x,怎麼訪問呢? 這里C語言又提供了一個運算符*, 你肯定不陌生,它就是乘號啊, 沒錯它是乘號,但這里它有另一個作用就是「間接訪問」芹塌,通過*運算符我們可以間接訪問x這個內存單元。
你可能已經清楚點了就是*p 就是說*p的值就是x, x的值就是*p, 所以這里容易產生一種概念
*p==x 有這個表達式存在且為真。 沒錯它確實為真。
但是錯誤就容易從這里產生了,因為*p==x,容易產生這種想法,那麼我把x賦值給*p, 即*p=x會有錯嗎? 理解方式就是*p即然代表了一個值,它在此處就是x, 那我要改變*p的值, 用*p=x 這沒有問題吧? 肯定有, 這里*的作用一定搞清是「間接訪問」, 間接訪問的話首先它就得有一個指向的對象,也就是說必須有p=&x的前提,有可能有*p=x, 無此前提的話真接使用*p就是空談,因為指針變數p是存在,但是p中存放的內容是什麼並不確定,它並沒有存x的地址啊,程序也不會那麼聰明的你這里睜首野定義了x它就指向x去。所以這種想法是錯的
分清*這個運算符三個作用:
1 乘號, 比如a*b表示a乘以b,是數學運算
2 指針定義標志, 比如我要定義一個指針變數有int* p; 這是定義時標志它是一個指針變數
3 間接訪問, 用於指針間接訪問它所指向的內存單元 如int *p,x; p=&x; 則可*p=5;這樣使用
② 有沒有c語言大神解釋一下指針的間接訪問和直接訪問還有指針是不是既是一個地址,又是一個變數
間接訪問是通過指針變數存放的地址訪問的,直接訪問就不用藉助指針變數,指針可以認為是地址,但不是變數,指針變數才是變數伍銀山,只是國內腔中書都把那兩個混在搏老一起
③ 什麼是c語言裡面的間接訪問
間接訪問是相對於直接訪問而言的,比如
int a = 1 ;
a = a + 1 ; //這就是直接訪問a,汪消因為用的是變數a本困緩知身
int b = 2 ;
int* p = &b ;
*p = 3 ; // 這就是間哪念接訪問,用指針p訪問b。
④ C語言:指針變數的使用之間接訪問
#include<stdio.h>
voidmain(){行爛
constintN=10;
doublex;
doublescore[N]={0};
double*px=&x;
*px=36.59;
【代碼1】//使用間接訪問方式將10賦給x
*px:px是指針,那麼*px就是解除了的普棗鄭通變數檔岩漏,與x完全等價
&px:是取px得存儲地址。
px:就是指針啦。
return0;
}