1樓:
*a+i
取出指標a的值,然後與變數i求和
*(a+i)
取出指標a向後偏移i個地址的值
2樓:天雨下凡
假設有如下**:
......
int a[5]=;
int i=3;
......
則*a+i的值為a[0]+i=1+3=4
而*(a+i)的值為a[0+i]=a[3]=7
c語言書上說a(i)和*(a+i)等價,我覺得不對啊
3樓:金色潛鳥
注意方括號和小括號。一維二維不要混淆。
c語言 語句中,方括號 不是標點符號,而是 運算子.
c語言 語句中,有恆等式: a[i] = *(a+i)a[i][j] 等於 (a[i])[j] 套恆等式公式,化成 ( *(a+i) )[j], 再化成 * (*(a+i) + j);
類似地 a[j][i] 等於 (a[j])[i],套恆等式公式,化成 ( *(a+j) )[i] ,再化成 * (*(a+j) + i);
求地址 用 & 運算:
1 維:& (a[i]) = & ( *(a+i) ); 注意 &* 抵消, 得 &a[i] = (a+i )
2維; &(a[i][j]) = (*(a+i) + j);
2維; &(a[j][i]) = (*(a+j) + i);
******************************=2 維:
a(i)等價於&a(i)(0) --- 不是小括號,是方括號,用於2 維 下標變數時的 a[i] 等價於 &a[i][0]a[i] 是第 i 行 的 首地址,等價於 &a[i][0]
4樓:運命に抗
書上是對的,你的理解完全錯了。
a[i]並不等價於&a[i][0]。
&a[0]等價於a;
&a[i]等價於a+i
同時取值
*(&a[i])等價於*(a+1);
其中*(&a[i])的*&抵消就是你書上說的 a[i]等價於*(a+1);
c語言中*(a+i)與a[i]是等價的。那麼*(a+i)是值還是地址?
5樓:匿名使用者
*(a+i)就是值了
*(*(a+i)+j)才和a[i][j]等價
c語言中a+i是地址嗎,書上說a+i是a[i]的指標,既然這樣,那麼*(a+i)為什麼還是
6樓:
a+i其實就是&a[i],肯定是地址
*(a+i)其實就是a[i],如果a是二給陣列的陣列名,a[i]就肯定是地址(等同於&a[i][0]),如果a只是一維陣列(指標陣列除外)的陣列名,a[i]就不是地址(原因是:二維陣列可以看作是多個一維陣列組成,即陣列的陣列)
*(a+i)+j就是&a[i][j],如果陣列a是二維陣列那就肯定也是地址啦
a[i][j]則是表示為*(*(a+i)+j)
7樓:匿名使用者
a應該是指的陣列名字吧
你首先應該知道陣列名字本身就是地址了
a+i是說a的地址向後在移動i個位置
也就是a[i]
a是指的陣列的首地址,開頭的位置
*(a+i) 也就是*a[i] 也就是a[i]的地址,只是這個地址離首地址偏移了i位置
再加上j 就是 a[i][j]地址
*(a+i)+j是針對二維陣列來說的,也可以說是特殊的一維陣列。
8樓:賽罡諫陽澤
是地址,你要取值是要*(
*(a+i)+j)的
*(a+i)其實就是a[i][0]的地址
c語言中{t=*(a+i); *(a+i)=*(a+j); *(a+j)=t;}代表什麼意思啊 謝謝了
9樓:匿名使用者
a是一個指標,a+i表示a所指位置的下i個記憶體區,a+j同理。這個程式的功能是: 交換 a+i 和 a+j 所指記憶體內區的內容,
容t是中間變數。 就好像你要交換兩瓶飲料,一瓶汽水,一瓶果汁,交換它們,要找一個空瓶子,這裡,t就是空瓶子 a+i 和 a+j 就是你要交換的兩瓶飲料,一共要倒三次,你懂了吧!
10樓:匿名使用者
交換資料。交換(a+i)所指的元素和(a+j)所指的元素的值,用的是「水桶演算法」。
11樓:匿名使用者
通過中間變數t,交換變數i和j 的值
c語言問題。 *p+i與*(p+i)有什麼區別啊?
12樓:匿名使用者
寫個c程式解釋吧。
#include
int main()
, *p = a;
printf("%d %d\n", *p + 1, *(p + 3));
return 0;
}輸出為 10 6;
為什麼呢?因為 *p = a 把 a 陣列的首地址的值放在 p 處,所以p = a,*p =a[0]= 9 => *p + 1 = 9 + 1 = 10.
p + 3 就是a陣列的首地址往後移動3位,即p = a[0], p + 3 = a[3]的值,就是6了。
13樓:匿名使用者
其實在定義時你這樣理解就很清楚答案了:
char *p;理解成char (*p);*p在一起是一個char。那麼,*p+i就是*p的值加上i,而*(p+i)是在先p+i再*操作,*是什麼意思呢,在這裡是「取值」。所以,*(p+i)是把指標移動i個位置,再返回前地址的值。
14樓:匿名使用者
地址加i,地址變了。地址
c語言'a'和"a"有什麼區別
15樓:偷個貓
1、本質區別
雙引抄號襲
裡面的是字串, 而單引號裡面的代表字元。
2、輸出區別
str = 「a」輸出的就是a這個字母;
str = 『a』輸出的測試65
3、底層區別
用單引號引起的一個字元實際上代表一個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。
16樓:匿名使用者
1 用''對包bai含的du
代表字元常量,其zhi值為字元a的ascii碼。
2 用""對包含的代表字dao
符串常量,版其有兩個元素,第一個是a,第二權個是結束符'\0'。
於是二者區別可以總結為:
1 型別不同,字元和字串。
2 佔用空間不同,前一個是一個位元組,後一個是兩個位元組。
17樓:匿名使用者
an和a的區別,用法區別
18樓:王若懷
在現有的c語言用法習慣中,'a'的意義是字元型常量a,而"a"的意義是字
符串常量a,預設專後面還
有個屬'\0'作為字串的結束符,此常量佔倆個字元空間,兩者的區別就在於資料型別不同,前者是字元常量(char),在計算機記憶體中佔用一個字元空間,後者是字串常量(string),在計算機記憶體中佔用倆個字元空間。
備註:在計算機中對於字串型資料的儲存是用字元陣列來實現的,所以上面的後者雖然本身作為字串常量,但是在計算機記憶體中佔用的是字元空間。
19樓:匿名使用者
一個'a『是字元,只佔一個字元的記憶體空間,"a"是字串,後面還有'\0'佔兩個字元的空間。
20樓:哥們兒會_臭臭
'a'是一個字元
"a"是個字串,後面還跟著一個'\0'
21樓:倒黴熊
前者是一個字元,後者是一個字串。
char a='a';
char a="a";
22樓:匿名使用者
'a'是一個字元,佔一個位元組,"a"是字串,包含了一個隱含的'\0',佔兩個位元組。
為什麼c語言中*(a+i)+j能表示a[i][j]的地址
23樓:
int a[3][4]; //假設定義一個3行4列的二維陣列,所謂二維陣列就是陣列的陣列
a[0]、a[1]、a[2]是陣列a的元素,而這個元素是陣列,而不是我們通常認為的基本資料型別的資料
所以*(a+i)就是獲取陣列a中第i個元素,等價於a[i],而a[i]本身又是一個包含有4個int型數值的陣列,a[i]是這個一維陣列的陣列名,我們知道陣列名的本質是一個地址,是陣列首元素地址,所以
*(a+i)+j就是表示下表第i行的第j個元素的地址了。所以,
*(a+i)+j表示的含義是元素a[i][j]的地址,也可以用a[i]+j來表示。
24樓:聽不清啊
int a[2][3]=;
printf("%d ",*(*(a+1)+2));
以上的引用能夠輸出60
因為a是二維陣列名,所以它是指向指標的指標(二級指標)。
*(a+1)就是a[1],它是一個一維陣列,也是一維陣列的首地址(指向一維陣列首元素的指標)。*(a+1)+2就是a[1][2]的地址,*(*(a+1)+2)就是a[1][2]。
25樓:匿名使用者
*(a+0)取出a[0]的值
a[0]的元素又是一個一維陣列
因此*(a+0)取出的就是這個一維元素的首地址那麼*(a+0)+0表示: 一維陣列a[n]中, a+0陣列元素a[0]的地址
*(a+0)+1表示一維陣列的1號陣列元素的地址
低AI和高AI有什麼區別,PS與AI有什麼區別?
對於騎砍ai使用遠端 拋 射之精準表示敬畏,跑位還是會的,射一下往旁邊移一下。就是不會找掩體。不過總的來說,騎砍ai很是低的可以 ps與ai有什麼區別?ai是向量圖形軟體放大縮小不受限制 ps是以畫素點陣的影象軟體 放大縮小受畫素多少控制 ai色彩純但不豐富 影象簡單沒有多的層次 ps色彩還原極佳 ...
尼康AUTO卡口和AI卡口有什麼區別
auto卡口bai和ai口最大的區別就du是在於鏡頭卡口邊鏡身末端zhi的凹槽 dao。auto卡口是平回 的,而ai口是有凹槽的,這個答會告訴機器最大光圈和當前光圈。在現代的nikon數碼相機裡,不改口直接可以用auto鏡頭的只有d40 d40x d60 d3000 d5000,別的機器如果直接使...
表示物質狀態的ai與aq化學中什麼區別
ai指的是電離物質水溶液,aq指的是水溶液,兩者的區別在於物質在水中存在的狀態是否電離。比如nacl水溶液,既是ai也是aq。ao 原子軌道 atomic orbital 應該是電化學方程式中的物質角標,也就是物質的狀態,化學中沒有ai,我想應該是al,一個大寫,一個小寫,是鋁的 cr是鉻,化學元素...