非常基礎的問題,燃眉之急,萬分感謝

2021-09-11 00:02:59 字數 4159 閱讀 5905

1樓:

int a[10];int * p;

p=a;p指向了陣列的首地址,可以當作陣列名來用,這是指標在陣列這邊的特殊用法,

p[i]等價於a[i]也等價於*(p+i);

2樓:匿名使用者

p[i]永遠等價於*(p+i)

==>這就是真理啊。

int *p=(int *)malloc(sizeof(int)* n);

或者int p[100];

都可以這麼用

這個操作是在編譯器內部實現的

p[i]和*(p+i)均表示從p地址開始偏移i *p對應的基本型別大小

如i * sizeof(int)

3樓:匿名使用者

你只要記著指標指的是地址就行了,當定義出來一個指標p後,你把p指向一個陣列什麼的,那麼p指向的就是陣列在記憶體中開始放資料的地址了。*(p+i)這個括號中的運算也地址運算,你可以把記憶體中資料存放抽象的畫出來,這樣你就明白了。

4樓:

總結:一個指標變數,用陣列方式訪問指標所指向的數值時,可以把陣列下表的形式轉化成指標的形式,轉化完成後,如果地址有效,則用陣列的方式訪問指標所指向的數值是合法的。例如,

struct s

s;int *p=&s.a;//p指向了s.a

p[0]=1;

p[1]=2;

上述操作中p[0]可以轉化成*p實際上就是對a賦值,p[1]可以轉化成*(p 1)實際上對b賦值

(1)指標和陣列的關係

對於一個一維陣列,例如int a[10],那麼a代表的是陣列的首地址,它和&a[0]是等價的。

定義指標int *p,p=a 等價於p=&a[0];

如果 p 指向a[0],那麼 *p 就是 a[0] 中的元素,p i 是陣列元素 a[i] 的地址,*(p i) 就是陣列元素 a[i] 的內容。

指向陣列的指標變數也可以帶下標,如 p[i] 和 *(p i) 等價的。

對陣列元素的a[i] 的引用頁可以寫成 *(a i) 的形式,在計算陣列元素a[i]的值時,實際上是先將其轉換成 *(a i) 的形式,然後再進行求值,因此在程式中這兩種應用時等價的。所以 &a[i] 和a i 的含義是等價的,此時可以把陣列名看成是一個指向陣列的指標,進行操作,但是還有一些不同。

相應的再進行指標運算的時候,如 p 是一個指標,那麼在表示式中也可以在它的下面加下標。p[i] 和 *(p i) 是等價的,那麼此時可以把一個指標看成時一個陣列進行操作。例如在定義一個字元指標時:

**:main()

輸出結果;

由此可以看出指標和陣列的密切關係。自己一定要多加理解,再深入研究和應用。

陣列名和指標雖然在功能上相近,但還是有區別的,陣列名和指標之間有一個不同之處。指標式一個變數所以可以進行賦值和自加自減的操作,語句p=a 和 p 都是合法的,但是不能對陣列名進行此類操作。

指標和陣列之間的關係:

指標的基本思想是以地址代實物,以小管大,以簡代繁,其本質是包含某個變數地址的一個變數。而陣列名代表的是一個實體地址,陣列下標是邏輯地址,從而決定了這兩者之間有密切聯絡,主要有如下兩點:

①任何可以由陣列實現的*作也能由指標實現。這是因為指標和陣列名都是地址,任一陣列元素均可由指標表示。

②在使用形式上,指標的使用亦可採用陣列的表示法,以獲得好的可讀性。指標的可讀性要比指標要強。

指標與陣列作為兩種不同的資料型別,必然有其區別,主要有如下五點:

①陣列具有靜態特徵,而指標有更多的動態特性和靈活性。陣列一經定義,其基址和大小便固定了,在該陣列的有效使用範圍內是不可變的;但是指標則具有很強的動態特徵,可以動態地指向任一該型別(定義決定)變數,這也就決定了它有更大的靈活性。

②指標是變數,可以被賦值,陣列名不是變數,不可以被賦值。

③指標作為地址可以參加一些地址運算,如加法、減法,在特定的環境下(如兩指標指向同一陣列中的元素)還可進行比較運算,但不同的陣列名之間則一般不進行比較運算。

④運算速度上的差異。一般來說,用指標要快些,因為在實際的運算中,總是把陣列下標表示通過儲存映象函式轉換為指標表示,按其地址訪問記憶體,這種轉換要進行乘法和加法的運算。

⑤陣列具有較好的可讀性,指標具有更強的靈活性。一般,對某些多維陣列中非連續的元素的隨機訪問用下標表示比較方便,當按遞增(減)順序訪問陣列時,使用指標快捷而且方便。

(二)指標與一維陣列

理解指標與一維陣列的關係,首先要了解在編譯系統中,一維陣列的儲存組織形式和對陣列元素的訪問方法。

一維陣列是一個線形表,它被存放在一片連續的記憶體單元中。c語言對陣列的訪問是通過陣列名(陣列的起始地址)加上相對於起始地址的相對量(由下標變數給出),得到要訪問的陣列元素的單元地址,然後再對計算出的單元地址的內容進行訪問。通常把資料型別所佔單元的位元組個數稱為擴大因子。

實際上編譯系統將陣列元素的形式a[i]轉換成*(a+i),然後才進行運算。對於一般陣列元素的形式:《陣列名》[《下標表示式》],編譯程式將其轉換成:

*(《陣列名》+《下標表示式》),其中下標表示式為:下標表示式*擴大因子。整個式子計算結果是一個記憶體地址,最後的結果為:

*《地址》=《地址所對應單元的地址的內容》。由此可見,c語言對陣列的處理,實際上是轉換成指標地址的運算。

陣列與指標暗中結合在一起。因此,任何能由下標完成的操作,都可以用指標來實現,一個不帶下標的陣列名就是一個指向該陣列的指標。

含有絕對值不等式的公式的基礎問題,燃眉之急!萬分感謝!

5樓:鬆_竹

不需要g(x)>0.

當g(x)≤0時,|f(x)|<g(x) 和 -g(x)<f(x)<g(x)的解集都是空集,仍然等價.這個不需推導,只是結論的引申運用. 對第二個命題可同理理解.

6樓:匿名使用者

1、如果g(x)=0則|f(x)|<g(x)不成立如果g(x)<0則 -g(x)<g(x)不成立當然-g(x)<f(x)<g(x)也不成立

所以g(x)>0是1的條件;

2、如果g(x)=0,推導顯然成立

如果g(x)<0則 f(x)無任何要求

而g(x)>0推導也成立。因此g(x)>=0是2的條件

7樓:匿名使用者

額,首先一個絕對值是一定大於0的如果前面的那個式子直接給出也就是|f(x)|<g(x) 則有隱含條件g(x)一定大於0。所以第一個式子無需說明g(x)大於0

第二個式子也無需說明至於推導過程其實要先理解什麼是絕對值,可以理解為在數軸上的數到原點的距離的集合你所說的f(x)和g(x)就可看作是一些數的集合……

你畫個數軸小於|f(x)|就相當於在f(x)的內部而大於|f(x)|則相當於在f(x)的外部

綜上不需要對g(x)做要求……

還有好久不做題回答有點亂……不懂可以再問……

c語言問題,求大神解答,萬分感謝!

8樓:匿名使用者

修改後的程式:

#include

void com_count(int [7],int,int); /*統計並列印每種商品的總銷售額及所有商品的總銷售額*/

void person_count(int ,int); /*統計並列印當前銷售人員的6種商品銷售額及該人員的銷售總額*/

int main(void)//int 後要加空格 ,,

,};printf("%8s%8s%8s%8s%8s%8s%8s%8s\n","saltor","1","2","3","4","5","6","total");

for(i=0;i<3;i++)

printf("%8s","total");

com_count(sale,4,7); /*呼叫com_count函式列印輸出結果圖中的最後一行*/

printf("\n");

return 0;//要有返回值

}void person_count(int p, int m) //void 後要加空格

printf("%8d\n",p[m-1]);

}void com_count(int s[7], int m, int n) //void後要加空格

for(j=0;j

s[m-1][n-1]+=s[m-1][j]; //s 陣列應為m-1行n-1列

printf("%8d", s[m-1][n-1]);}

關於離婚的問題。求幫助!萬分感謝

離婚協議書只要把孩子的撫養費 財產的分割等問題都寫清楚就可以,兩個人簽了協議到民政局就可以離婚了。我國法律硬性規定,協議離婚雙方必須到場,請律師 等途徑都是行不通的。電視裡當律師面籤個字就離的現象是港臺是杜撰但絕不是不是大陸。一個人去怎麼都離不了。真不行你就只有訴訟離婚了。離婚協議中寫清楚財產的分割...

求大神解答C語言問題,要原創的,萬分感謝

include include int main return 0 include include int main operand1 operand2 break printf lf n operand1 printf do you want to continue y n or y n n fo...

關於老人的健康問題,專業人士回答,萬分感謝

怎樣才是健康的老人?腰不彎背不駝 無病 就是健康的老年人嗎?據世界衛生組織對健康的定義,社會醫學家認為,對老年人的健康評價應包括以下四大方面 日常生活能力 首先指可以自理,如洗澡 穿衣 進食等,不需要別人監護。當然也包括老人操持家務能力,如打 購物 自理經濟 做一點家務等等。精神健康 主要指沒有精神...