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]);} 表用翻譯機器啊!不準的!的,注意素質!別坑了人家啊。很急 請高手幫忙翻譯一下,萬分感激 風險投資企業的最佳數量。風險投資不僅僅是要對新興企業投資而且要給企業提供諮詢,給企業提供諮詢耗費時間頗多,因此風險投資者必須在諮詢強度和投資企業數量之間求得平衡。我們共同決定最佳的風險投資企業數量以及管理諮詢的強... 1.int 是指標型變數。代表地址,指標其實也是一個整形資料,如果要看它代表哪個記憶體地址的話還是 d。比如int p 檢視時用printf d p 就可以知道它確切代表哪個地址。2.是這樣的,但是要作為函式引數改變i的值時則必須傳入i的地址 即 i.3.是 d吧?標準c中指標型變數只有4位當然不可... 我建議你走雙錄取 也有中介說是快速錄取的,因為,日語專業去美國,等於沒專業。沒有相關專業背景,你考什麼都沒意義。雖然大多數雙錄取的預科班 pre master都是隻教授英語,但也有個別大學也教授大學相關專業,比如你研究生準備讀金融,那預科班就會有金融課程可選,這樣,有了相關專業背景,你將來讀研究生也...幫忙翻譯一下 非常急 萬分感謝
C語言極其基礎的問題,萬分感謝, C語言 三個C語言極其基礎的問題,萬分感謝!
關於美國研究生留學簽證問題!急!萬分感謝