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

時間 2021-09-11 22:25:28

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]);}

急請高手幫忙,取個字的成語 萬分感謝

幻淚 無痕 北辰星拱 擘兩分星 炳如日星 炳若日星 百星不如一月晨炊星飯 燦若繁星 承星履草 大步流星 電掣星馳電流星散 戴月披星 帶月披星 斗轉星移 曙後星孤分星撥兩 分星擘兩 福星高照 分星劈兩 換鬥移星華星秋月 擊電奔星 皎如日星 急如星火 景星鳳皇景星鳳凰 吉星高照 景星麟鳳 景星慶雲 急於...

求血肉之花的百度雲資源!萬分感謝

是有的,看到就好好珍惜,很難找了。我發你把,你看怎樣呀,今天很閒啦,記得給我採納哈!直接去,基本都有了。秦夫人云資源 多試幾次不行就到這個新入口。是,這個91sus。那,上面就有。這,倒是有個,已測試可用。之前有很多,現在只去我認為不錯的看到就好好珍惜。經典 大集合雲網盤 你的意思是你有經典 大集合...

超級難的數學題,求高手解答,萬分感謝!真的非常難

假設分為甲乙兩筆,單價分別為x,y。則10850 x,y 11150。又設甲有z噸,乙為19 z噸。總價209060 x z y 19 z 移項得x 209060 y 19 z z 209060 z 19y z y。由於x,y都為整數,所以 209060 19y z必須也為整數,而10850 y 1...