1樓:新來的文盲
a比a少一維,我具體給你解釋下。
幾個元素可以組成陣列,而幾個一維陣列可以組成二維陣列,如此一直增加維數。
比如說a[0]=2,a[1]=1,a[2]=3,組成乙個一維陣列,這就是a.但是,你要注意,a不是直接把這些東西都存著的,a只存首位址。
假設定義了乙個二維陣列a[3][3].這時候a[0],a[1],a[2]就不再是元素了,而代表的是乙個有三個元素的一位陣列,而此時的a就是乙個二維陣列。如果感覺這個有點困難沒關係,等學習了指標什麼的久很好理解這個了。
再說說你給的程式,你是不是在疑問為什麼gets()直接給str1 就可以了?還有那個輸出函式,為啥只用給str1就可以?
這得給儲存方式有關,字串就是字元的二維陣列,gets()需要輸入字串的首位址,這個還算好理解,因為你應該學過了scanf()了,二者差不多,關鍵是為什麼輸出函式直接就寫了str1呢?printf()之前你學的一般都是(printf("%d",a[1]));這種型別的。這裡為啥要填乙個位址引數呢?
這是因為你前面是%s s代表字串,字串本身就是二維的,因此,你當然不能只給他乙個單獨的元素了,那麼,你給了首位址他如何知道你這個字串是啥呢?因為字串都是順序儲存的,更重要的是字串在結尾處有個標誌「/0」,因此,你只要給力他首位址,他就知道從**開始,從**結束了。
純手打,望採納。
2樓:gta小雞
&a表示取a的位址,它是乙個指標型別;a表示a本身。
scanf中以%s佔位符讀入字串時,是不需要加取位址符&的,因為字串陣列或者指標本身就是指標型別。
c語言中 *b=&a什麼意思? *b和&a分別是什麼含義啊?
3樓:餡嘍嘍嘍
(a>b)?a:b
表示如果a>b為真,則取問號後邊的第乙個值,這裡是a
如果a>b不為真,則取問號後邊的第二個值,這裡是b
《表示式1>?《表示式2>:《表示式3>; "?
"運算子的含義是: 先求表示式1的值, 如果為真, 則執行表示式2,並返回表示式2的結果 ; 如果表示式1的值為假, 則執行表示式3 ,並返回表示式3的結果。
若a-b非零值(即a-b邏輯值為1)則輸出a值;若a-b為零值(即a-b邏輯值為0),則輸出b值。
/ 代表的是 除法。如果 a 和 b 都是整數,不是 float 等這種浮點數,所以結果只保留整數,所以 a/b 算出來是整數。
另外,% 代表的是取餘數,即: 5%3 等於 1 餘 2,結果就是 2
c語言中指標a=b與*a=*b有什麼區別
4樓:育知同創教育
a=b就是把b的位址賦給a
*a=*b就是把b的記憶體位址對應的值給a
5樓:康瑜小簧
b指標的話,b=a肯定不對。要麼*b=a,要麼b=&a,這兩種語法都
正確,但是意義不同。前者將a的值賦值給指標b所在的位址,兩個值相互不影響。後者將a的位址賦值給指標b,a和b指向同乙個記憶體位址,該位址的值如果有變化,a和*b同時會變化。
c語言中,a==b與b==a有什麼區別麼?
6樓:匿名使用者
沒區別,==是恆等於,不存在賦值問題,單純比較,怎麼寫都行,但是=號就不一樣了,是右邊賦值給左邊
7樓:育知同創教育
寫法幾乎沒有什麼區別。前後順序不影響的。
8樓:匿名使用者
雙等號 是比較運算子, 沒有什麼區別
9樓:幻世封神
沒什麼區別,看個人習慣了
請採納吧
10樓:研凌工控電腦
無區別,這和只有乙個=號不同
c語言中(a>b)?a:b和(a
11樓:學雅思
一、表達意思不同
1、(a>b)?a:b:如果a大於b,則取a,否則取b。
2、(a
二、邏輯順序不同
1、(a>b)?a:b:記憶體邏輯中先執行大於的判斷,之後執行下一步。
三、執行順序不同
1、(a>b)?a:b:在a跟b中取最大值。
12樓:幻翼高達
c語言中,「(a>b)?a:b」和「(a」的區別是當a與b相等時,前者的值是b,後者的值的是a。
條件運算子的表示式為「表示式1?表示式2:表示式3」,先求解表示式1,若其值為真(非0)則將表示式2的值作為整個表示式的取值,否則(表示式1的值為0)將表示式3的值作為整個表示式的取值。
例如:1、max=(a>b)?a:b
就是將a和b二者中較大的乙個賦給max。
2、min=(a就是將a和b二者中較小的乙個賦給min。
13樓:魚與鹹魚
1、本質區別
雙引號裡面的是字串, 而單引號裡面的代表字元。
2、輸出區別
str = 「a」輸出的就是a這個字母;
str = 『a』輸出的測試65
3、底層區別
用單引號引起的乙個字元實際上代表乙個整數,整數值對應於該字元在編譯器採用的字符集中的序列值。
14樓:go學龍
第乙個若a>b為真即執行a,為假及執行b
第二個若a
15樓:匿名使用者
這個和()沒什麼關係,我詳細的講一下,你一定要看完啊:)注意理解a++和++a的區別:
a++: 先將a的值代入表示式,在表示式運算完畢後,再將a進行++處理
++a: 先將a進行++處理,再將a的值代入表示式注意對於a++這裡有乙個「在表示式運算完畢後,再將a進行++處理」,b=(a++); 這是乙個賦值表示式,
所以先將a的值代入表示式,必須等到賦值表示式運算完畢後,再將a進行++處理,
也就是說必須等到給b賦值完畢後,才將a進行++處理所以b=3,a=4
16樓:匿名使用者
1.a=b>c相當於a=(b>c)是乙個賦值表示式,把(b>c)的值賦給a,
(1)如果b>c為真,則把1賦值給a,
(2)如果b>c為假,則把0賦值給a。
(3)執行完該表示式,僅a的值改變,b、c的值不變。
2.a==b>c也相當於a==(b>c)是乙個符合表示式,先判斷(b>c)的真假,
(1)若為真,a為1則該表示式為真,即該符合表示式的值為1。
(2)若為真,a不為1則該表示式為假,即該符合表示式的值為0。
(3)若為假,a為0則該表示式為真,即該符合表示式的值為1。
(4)若為假,a不為0則該表示式為假,即該符合表示式的值為0。
(5)執行完該表示式,a、b、c的值都不發生改變。
17樓:周肆爻
定界符不同,字元常量用的是單直撇,字串常量則用雙引號長度也不同,字元常量只能有乙個字元,也就是說字元常量長度為一,而字串常量可為0,也可為任意數。即使字串常量字元數量為一,長度也不是一。
例如,字串常量"h"(這手機沒雙引號)
則長度為2,字元就是h \0
18樓:新來的文盲
a比a少一維,我具體給你解釋下。
幾個元素可以組成陣列,而幾個一維陣列可以組成二維陣列,如此一直增加維數。
比如說a[0]=2,a[1]=1,a[2]=3,組成乙個一維陣列,這就是a.但是,你要注意,a不是直接把這些東西都存著的,a只存首位址。
假設定義了乙個二維陣列a[3][3].這時候a[0],a[1],a[2]就不再是元素了,而代表的是乙個有三個元素的一位陣列,而此時的a就是乙個二維陣列。如果感覺這個有點困難沒關係,等學習了指標什麼的久很好理解這個了。
再說說你給的程式,你是不是在疑問為什麼gets()直接給str1 就可以了?還有那個輸出函式,為啥只用給str1就可以?
這得給儲存方式有關,字串就是字元的二維陣列,gets()需要輸入字串的首位址,這個還算好理解,因為你應該學過了scanf()了,二者差不多,關鍵是為什麼輸出函式直接就寫了str1呢?printf()之前你學的一般都是(printf("%d",a[1]));這種型別的。這裡為啥要填乙個位址引數呢?
這是因為你前面是%s s代表字串,字串本身就是二維的,因此,你當然不能只給他乙個單獨的元素了,那麼,你給了首位址他如何知道你這個字串是啥呢?因為字串都是順序儲存的,更重要的是字串在結尾處有個標誌「/0」,因此,你只要給力他首位址,他就知道從**開始,從**結束了。
純手打,望採納。
19樓:
&a取址 *p取值這沒有什麼可說的。
int *p; int a;
a的位址1000h,即&a == 1000h. p是指標,它本身也有存放它的位址,設1200h,
即&p == 1200h(win32下,指標本身長度32位即4位元組,可通過sizeof(p)得到). 這樣就是用到兩塊記憶體了。
p = &a; 即p == 1000h. 這是乙個位址值,本質是值,即可以加減等操作的。但是加減後的p, *p可能就無法訪問了,因為它已經不指向a了,比如p == 1004h了,如果這是在某一函式裡操作的,而1004h位址並不本程式的位址空間裡,取*p時那就非法訪問,要崩潰的;但如果1004h位址正好是這函式裡另外乙個int b;變數的位址,那*p的值就是b了。
*p表示取p指向位址的值,也就是1000h上的值; a = 1; 說明1000h上的值為1,所以*p == 1;a, 它本身只是乙個符號而已,這個符號代表了位址1000h起的int型長(4位元組)的乙個記憶體塊, a=1,就是記憶體塊放乙個值1, 如果有彙編的思想,能更形象點:[1000h] = 1,根本不需要a,b,c...之類的字元來表示,直接對記憶體位址進行訪問。
20樓:星呈幻
a和p是變數,&a和*p是表示式,1和0x1000是常量a和*p表示的都是整形左值,p和&a表示的都是指標型左值,1和0x1000表示整形和指標型右值。(左右值的概念不清的話,google一下)
在記憶體中,a和p有儲存空間空間,a存放著1,p存放著0x1000,*p和&a沒有空間,他們的運算結果是在暫存器中存放的,1和0x1000也有空間,在程式的常量段存放。
*p按照stanley lippman的著作《c++ primer》中的描述,p是指標變數,*是解引用操作符,*p是乙個表示式,含義是「對指標變數p進行解引用操作」,這與表示式&a的含義「取整形變數a的位址」是正好是相反的操作。
21樓:匿名使用者
首先我們明確a為乙個變數 假設定義是 int a;
再明確p是乙個指標,假設定義為 int* p;
當我們定義了乙個a是系統會分派乙個記憶體給你用來存放他的數值,如 執行了a=10;後 這個記憶體就存放了乙個10的數字,當我們要用到它表示的10時,直接用a替代就可以了。
現在我們再用 p=&a "&"叫取位址符,他是乙個運算子。 "&a"就表示指向a有就是上面的那個存著10的記憶體的位址。如果我們用到a的時候,很明顯,我們不能直接用p了,因為他是乙個位址而不是我們需要的10這個數,那怎麼辦呢?
我們這裡就可用"*"這個符號,他表示取這個指標所指記憶體上的資料,即 *p就表示a了用法什麼的都一樣。
為什麼c語言中 ab是 ab不是 ab
空翎人 因為自加自減的優先順序比算術運算子高,所以先算a 因為a在b前面,所以先算a, 小成要吃糖 c語言運算子有優先順序的。 你好!1 等號是賦值運算,這就意味著等號左邊必須是被賦值的變數,顯然a 7是表示式,而不是變數。2 整形運算是隻取整數部分的,你定義的c1,c2,c3均是整數,所以 c3 ...
c語言 中 ab 的值?C語言中如何求a b的值!
a的ascii碼是10進製的97,16進製制的61,b的ascii碼是10進製的98,16進製制的62,順序寫到一起是16進製制的6162,轉換為10進製就是24930。ab 占用2個位元組 字面上是這樣 賦給int型別變數在某些編譯器 如dev c 中是可能的,但沒有推廣價值,也公尺有應用價值,所...
c語言中s a是什麼意思,c語言中,a b是什麼意思?
1.s a 等價於 s s a 等價於 s s a a a 1 意思是 s自增a值以後,a再自增1。2.要弄清楚表示式的具體含義,必須知道運算子運算的先後順序,然後分步進行解釋。以下是運算子的優先順序別表 是s s a 的意思,其中a 是a a 1的意思,但 在a後面表示後加加,是整個表示式運算結束...