c語言,陣列首位址的位址和首位址的內容居然是一樣的,看懂了就進來看看吧

時間 2021-08-30 11:19:49

1樓:168呵呵

理解這個很重要,當你理解之後你就會發現設計c語言的大師們是多麼的聰明,這些設計非常利於c語言書寫的簡潔

a與&a都是指標,指標有兩個要素

第乙個是位址值,也就指向的位置,你列印出來的就是位址值,a與&a的位址值是一樣的

第二個是型別(所指向的資料型別),a指向陣列第乙個元素,&a指向陣列a,a+1後的位址值會偏移乙個元素的長度,&a+1後的位址值會便宜一整個陣列的長度,所以a與&a型別是不一樣的

關於指標與陣列的關係,理解之後對你寫**質量會有很大的幫助,當然一開始理解起來會有難度,有一句話說的好:在c語言中只有一維陣列(n維陣列的元素是陣列),陣列名作為指標時永遠指向第乙個元素,如

陣列a[3] ,*a = a[0],

陣列a[3][4], *a = a[0],只不過這時候a[0]又是乙個陣列,這時候a[0]又是指向它自己元素的第乙個元素,又有*a[0] = a[0][0].

這種方式可以推廣到n維陣列,所有陣列直接對陣列名取位址(如&a)得到的指標指向該陣列,而不是指向第乙個元素,注意這點區別哦,理解了我上面所說的,就知道了

還有對你的疑問說說我的看法

「arr表示的是陣列的首位址」:沒錯,arr就是指向第乙個元素的指標

"&arr表示的是陣列的首位址的位址":這句話不對,我更傾向於把&arr理解為指向陣列arr的指標

「arr相當於乙個指標, 我現在直接用printf輸出arr相當於輸出了arr中儲存的內容(不是輸出以該內容為位址的變數),其結果居然與arr的位址是相同的,這怎麼可能。」:

arr只是乙個符號,本身不是變數不存在儲存內容的說法

2樓:縱橫家

c語言裡面陣列的位址也是首位的位址.這是定義的..& 是取位址。

arr本來就是指標型別就是乙個資料位址 &arr 、arr 他們指向的位址都是首位元素的位址 也是整個陣列的位址。

3樓:

這個帖子分析得很精彩,樓主可以看看

c語言中的符號 & 和 | 是什麼意思?

4樓:沐星辰曦

&: 在c語言中有兩種意思,一種是取位址符,是單目運算子;另一種是位運算子,表示「按位與」,是雙目運算子。|: 是位運算子,表示「按位或」。

1、符號 & 和 | 這兩個運算子都是二進位制的按位操作符。

&: 二進位制「與」(都為1時,結果是1,否則是0。),比如:1010 & 1011 = 1010,1010 & 1000 = 1000。

|: 二進位制「或」(有1時,結果是1,都是0時,結果為0。),比如:1010 | 1011 = 1011,1010 | 1000 = 1010。

2、位運算子將數字視為二進位制值,並按位進行相應運算,運算完成後再重新轉換為數字。

例如:表示式10&15表示(1010 & 1111),它將返回表示1010的值10。因為真真得真,或者是11得1,同位全是1結果也是1。

表示式10|15表示(1010 | 1111),它將返回表示1111的值15。假假得假。全零得零。

3、c語言中的符號分為10類:算術運算子、關係運算子、邏輯運算子、位操作運算子、賦值運算子、條件運算子、逗號運算子、指標運算子、求位元組數運算子和特殊運算子。

4、位操作運算子:參與運算的量,按二進位制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。

5樓:匿名使用者

&在c語言裡可能有兩種意思,一種是取位址符,這種情況是單目運算子,另一種是位運算子,表示按位與,這種情況是雙目運算子

具體是哪種,要根據在語句中的使用來看

|就簡單多了,只有一種情況,位運算的,按位或i | j

=00000000000000000000000000000001 | 00000000000000000000000000000010

=0000 0000 0000 0000 0000 0000 0000 0011

6樓:蛋糕

這兩個運算子都是二進位制的按位操作符。

&: 二進位制「與」,如 1010 & 1011 = 1010,1010 & 1000 = 1000。都為1時,結果是1,否則是0

|: 二進位制「或」,如 1010 | 1011 = 1011,1010 | 1000 = 1010。有1時,結果是1,都是0時,結果為0。

7樓:約_束

&表示「和」,並列的關係;|表示「或「,選擇的關係。

8樓:匿名使用者

&按位與 |按位或 乙個數或字元在記憶體是二進位制01存放的,&|是將每一位按位與按位或,如

=00000000000000000000000000000000

9樓:匿名使用者

在c語言中,an&amp和c都是邏輯運算子,它們都是雙目運算子。有3個邏輯運算子,即「and」、「x」和「!」.

邏輯運算子用來判斷事物是「成立」還是「無根據」或「真實」還是「錯誤」。判斷結果只有兩個值,數字是「0」和「非0」。其中,「非0」表示邏輯運算結果為「真」,「0」表示邏輯表示式的結果為「false」。

10樓:匿名使用者

|c語言中位操作運算子:

參與運算的量,按二進位制位進行運算。包括位與(&)、位或(|)、位非(~)、位異或(^)、左移(<<)、右移(>>)六種。

符號 &(位與):二進位制「與」,如 1010 & 1011 = 1010,1010 & 1000 = 1000。都為1時,結果是1,否則是0;

符號 |(位或):二進位制「或」,如 1010 | 1011 = 1011,1010 | 1000 = 1010。有1時,結果是1,都是0時,結果為0。

c語言運算符號指的是運算符號。c語言中的符號分為10類:算術運算子、關係運算子、邏輯運算子、位操作運算子、賦值運算子、條件運算子、逗號運算子、指標運算子、求位元組數運算子和特殊運算子。

11樓:命中傷定

|&: 二進位制「與」,如 1010 & 1011 = 1010,1010 & 1000 = 1000。都為1時,結果是1,否則是0

|: 二進位制「或」,如 1010 | 1011 = 1011,1010 | 1000 = 1010。有1時,結果是1,都是0時,結果為0。

c語言是一門通用計算機程式語言,應用廣泛。c語言的設計目標是提供一種能以簡易的方式編譯、處理低階儲存器、產生少量的機器碼以及不需要任何執行環境支援便能執行的程式語言。

12樓:安徽新華電腦

% 單列出來就是取模運算子

%%沒有特殊含義

但,在格式化io語句,如scanf/printf/format等之中,百分號是特殊格式化字元

%n 回車

%d 輸出整數

%% 輸出乙個百分號

還有很多,可以參考格式化語句的說明

13樓:劉文正粉絲

5÷2=2......1

學過數學的都懂吧?

/號是求2,而%號就是不要2,求的是1.

而/號還有乙個特點:5/2==2因為/號兩邊都是整數,它的結果還是整數.如果要算5/2的真實結果,就要這樣:

5.0/2這樣5.0是個double型的,結果也是double的.

而%號的左右兩邊的數都必須是整數.

c語言中+=和-=是什麼意思

14樓:梅竹青洪橋

可以提高程式的效率;

編譯器在語法翻譯的時候最終會用逆波蘭式來表示(其他的也可以的)也就是翻譯成x+=a的形式。

所以我們書寫的時候把x=x+a

寫成x+=a說一下原理:

x+=a等價於

x=x+a。

大三的時候編譯原理有講的。

祝你好運

15樓:仝全雪錦

=是賦值運算子。

i=2,是指把「2」這個值賦給i,這樣i就有了值,為2。

==是比較運算子,即「等於」。

if(i==2)

printf(「%d」,i)

是指:如果i等於2,就列印出i來,即列印出2

16樓:尾桂花函癸

/=是復合賦值運算子,num/=10:相當於num=num/10凡是二元(二目)運算子,都可以與賦值符一起組合成復合賦值符。c語言規定可以使用10種復合賦值運算子。即:

+=,-=,*=,/=,%=,<<=,>>=,&=,^=,|=c採用這種復合運算子,一是為了簡化程式,使程式精練,二是為了提高編譯效率(這樣寫法與「逆波蘭」式一致,有利於編譯,能產生質量較高的目標**)。

17樓:耿翠花老裳

「==」就是把等於的意思而「=」是賦值運算子例如;a==b,就是a等於b

而a=b,則是把b賦值給a

++i--i

(在使用之前使i的值加(減1)

例如i的原值

i=3則j=++i

(i的值先加1變成4,在賦值給j,j的值現在是4)而i++i--

例如j=i++

則先是將i的值3賦給j,j的值變成3,而i的值變成4)

18樓:逢淑英毛戊

==,判斷兩個值是否相等

例:if(i==0),即判斷i是否為0

++,相當於加1,例i++,相當於i=i+1--,相當於減1,例i--,相當於i=i-1!=,判斷兩個值是否不相等

,例if(i!=5),判斷i是否不等於5

19樓:貝蘭希戊

=是賦值運算子

相當於傾倒

a=5,a=p及a=c*d都是它的應用

相當與分別把5,p,c*d倒到a的記憶體裡

賦值運算子左邊必須是變數而右邊可以是變數,常量或者是表示式==是關係運算子

優先順序比=運算子高

相當於判斷左右是否相等

相等值為1

,否則值為0

如:#include

void

main()

20樓:皇甫翠花項午

你上面都是2個\\,

在字串裡面"\\"代表輸出

\,所以上面輸出abc\ndef和abc

\ndef,

也許\n是換行的意思,但是因為\\的存在,所以優先\\結合,如果沒有\\,那麼就是換行了,你可以嘗試下乙個\

21樓:暢季暴天

?:連起來的意思

我舉個例子吧

inta

=3;int

b=2;

intc;

if(a>b)?(c=a):(c=b);//意思是如果a>b就執行c=a,否則就執行c=b

類似於下面的語句

if(a>b)

else

條件運算子是?:

表示式為:表示式1?表示式2:表示式3

表示式2是條件成立(邏輯值為1)時整個表示式的取值

表示式3是條件不成立(邏輯值為0)時整個表示式的值

例如:m=10

&&b-->20?a

:bx=3+a>5

?100

:200

優先順序條件運算子優先順序高於賦值、逗號運算子,低於其他運算子

例如:⑴

m=10

&&b-->20?a

:b等價於:(a++>=10

&&b-->20)?a

:b⑶x=3+a>5

?100

:200

等價於:x=

((3+a>5)?

100:

200)

結合性條件運算子具有右結合性

當乙個表示式中出現多個條件運算子時,應該將位於最右邊的問號與離它最近的冒號配對,並按這一原則正確區分各條件運算子的運算物件。

例如:w

?x+w

:x

:y與w

?x+w:(

x

:y)等價與

(w

?x+w

:x

:y不等價----歡迎加入------c++部落------------hello

word!--------

無論你是初學者還是專家,只要你熱愛程式設計、交流、分享,c++部落因為你而精彩~

c語言陣列首地址地址常量是個什麼意思

舜惜夢枚千 1.它們的地址值是相等的 2.第1個元素的地址如果是p,則p 1就是第2個元素的地址 3.陣列的首地址如果是p,則p 1就跳過這個數陣列而指向這個陣列最後一個元素最後一個位元組的下一位元組。 這個a比較特殊,當然不是地址常量。a取都得是整個陣列的地址int a 10 printf x n...

c二維陣列名指的是陣列的首位址嗎

祿學校寄藍 是的,你可以試試看,比如int arr 4 4 cout arr arr 0 0 比較一下陣列名和陣列第乙個元素位址的值比較一下,看是不是相等 陣列名所代表的資料型別是指標常量,二維陣列就是指標的指標 二重指標,二重指標所存的內容就是一重指標的位址。所以二維陣列代表的是二重指標常量,所儲...

C語言指標與位址的問題,C語言指標與位址的問題

只有當定義指標時才可以這樣寫 int pointer p 這條語句和 int pointer pointer p 兩條語句等價 printf func pointer 是把pointer所指向的值 變數 做函式引數 printf func pointer 是把pointer的本身所儲存的值,即所指向...