c語言指標問題解答c語言中指標加減問題,求解答。

2021-03-05 18:52:48 字數 3068 閱讀 5270

1樓:匿名使用者

1.能通過指標p改變a裡面的值,前提是a不是常量且指標p不是指向常量的指標(只讀型指標)。舉例:

a、int a=1,*p=&a;

//此時a等於100了

*p=100;

b、int a=1;

const int *p=&a;

//不能通過p改變a的值,因為p是隻讀型指標(只讀型指標可以指向變數,但不能通過指標修改它指向的變數的值,就好像在它看來,它好像指向的是一個常量)

//*p=100;

c、const int a=1,*p=&a;

//同樣不能,因為a是常量且p是隻讀型指標

//*p=100;

2.int (*p)[n]是指向陣列的指標(陣列指標),p指向的陣列需有n個int型元素,如:

int a[2],b[2][2],(*p)[2];

則p=&a;p=b;p=b+1;都行。

int *p();是函式宣告。函式名是p,不需要引數,需返回一個int型別的指標。

int (*p)();是指向函式的指標(函式指標),p可以指向的函式需滿足無參且返回型別為int,如:

int f()

int (*p)()=f;可以。

const int *p;是將p定義為指向常量的指標(只讀型指標),這樣就不能通過指標p改變它指向的變數的值,就好像它指向的是一個常量,前面已有這樣的例子了。

int * const p是將指標p自己定義為常量,即它永遠指向同一個變數或常量,不能改變p自己的值(即除了初始化時,不能用=為它賦值),因此必須在定義時初始化p,如:

int a=1,c;

const int b=2,d=3;

則都行,而p=&c;p=&d;都不行。

2樓:匿名使用者

一、p指向a存值的地址,如p指向地址的記憶體的值為

0001,則*p=0001(為1),這時修改*p=0010,則a的值相應的被修改為2。

二、我們只能通過*p修改a的值,p是一個地址指標,更改p後 p指向了另一塊記憶體,a的值不會被更改。

三、int *p p是一個陣列,陣列內每個元素都是int*型別,也就是指向整型資料的指標型別,

int *p()是int (*p)()函式呼叫後的返回值指標

int (*p)()是一個函式的函式指標,即指向函式的地址,在呼叫匯出函式時,經常用此方法呼叫函式

const int *p是指標指向的值無法改變,但是指標本身可以改變,可以重新指向一塊記憶體

int *const p是指標不能改變,但它指向的值是可以改變的

其實還有 const還有其它用法,我們可以來修飾函式,同時修飾地址和值,如:const int * const p,這樣想胡亂改就改不掉了

c語言中指標加減問題,求解答。

3樓:

首先:float a[10],*p,*q;

p=&a[4],q=&a[7];

那q-p=2(a[4]與a[7]之間有兩個元素) ***這裡就不對了,q-p = 3 不是等於2,

可以用printf("%d",q-p);看看。

p+3-p = 12 是地址按「位元組」排列的位置差,表示p+3和p之間有12個位元組

q-p = 3 表示q和p之間有3個float型別的資料,每個佔4位元組,3x4 = 12 和上面的結果一致

4樓:匿名使用者

嗯,沒錯,對指標的加減運算是以步長為單位的,不過這是對編譯器來講的。但是對於機器來講,指標也是二進位制資料,在機器內對它們進行運算和一般的資料是一樣的,只是因為編譯器知道它們是指標,所以編譯器告訴你的是指標之間的步長。以下是一個測試的程式,應該能說明問題吧,僅供參考:

#include

#include

void main()

5樓:匿名使用者

所謂p+3-p=12只是個說法而不是語法。

如果你把地址當整數那麼它們的差是12. 如果你把地址當float* 他們的差就是3

6樓:匿名使用者

這不是與p+3-p=12矛盾,而是,這個等式本來就不成立好不。學指標的時候會有點糊塗,這個很正常。

你把兩個東西混淆了:陣列的下標和實際的地址。

float型別的指標,在地址上來說的確是按4位元組為單位移動的,但是在陣列裡面還是一格一格一棟棟餓啊,這個一格的單位是4位元組。

p+3-p,你等式左邊的演算法是在陣列裡的單位,既一格一格移動;

=12,你右邊的是按照地址的實際大小得出的。

兩邊表示的不是一種單位啊。。。

還有就是這種理論上的東西你越想越糊塗,實際去寫一個測試程式,把指標指向的地址打出來看看 不久知道了?

c語言指標問題,求解答

7樓:傷我中國心

1,*是取值運算子,因為你要判斷tt的值的情況,所以要用 *2,tt++相當於

tt=tt+1;這個是指標向後移動,不需要取值,謝謝,望採納

8樓:匿名使用者

你的tt是指標吧。

tt指向的是

地址(比如地址值為:10ff:1000),*tt是取這個地址中儲存的資料,

而tt++意思把tt指向的地址值+1,即tt現在指向了(10ff:1001)這個地址,這個地址中儲存的下一個資料。

if(*tt>='a'&&*tt<='z') 為什麼這裡也要* 和剛才的解釋是一個意思。

你需要看一彙編,瞭解一下計算機如何儲存資料的,再看這些就是常識了。

9樓:匿名使用者

加*號表示指標指向的地址單後設資料,不加則表示指標變數的值(也就是所指向的那個變數的地址),例如:如果int t=10, *p; p=&t; 則*p和t等價,其結果都是10,而p則表示變數t的地址,也就是&t。

c語言中指標問題(真的求,搞不懂,求解答)? 5

10樓:匿名使用者

第二章temp是一個指標,沒有賦值的指標,操作的時候不加*,如果編譯器不報警告就可以正常執行。

c語言中指標加減問題,求解答C語言中指標問題真的求,搞不懂,求解答?

首先 float a 10 p,q p a 4 q a 7 那q p 2 a 4 與a 7 之間有兩個元素 這裡就不對了,q p 3 不是等於2,可以用printf d q p 看看。p 3 p 12 是地址按 位元組 排列的位置差,表示p 3和p之間有12個位元組 q p 3 表示q和p之間有3個...

c語言中指標中的是什麼意思,C語言中,指標中的 是什麼意思

在宣告int pirand中 表示這個變數是int型別的指標 在宣告之外 可以理解成一個運算子 或者一個函式 和 是一對逆運算 的意思是讀一個變數的地址 比如你宣告瞭int a a是a的地址可能是xx1001之類的可以在除錯裡看一下 的意思是讀一個地址指向的內容 pirand pirand rand...

c語言的指標問題,C語言的指標問題

printf c p 3 分佈來看,c是要列印輸出一個字元。p指向那個字元陣列,p就是字元 a 那麼 a 3是多少呢,a 1是b 2 是c 3 是d注意是 p 3 而不是 p 3 這是由區別的。是的。p 3。是對p指向的那個值加3,p開始是指向a的,故a加3後就是d了 而p 執行3次的話,是指標p本...