1樓:
1.陣列名可以當成指標常量,該指標常量指向陣列的第一個元素,例如:
char str[10]=; //未指定的陣列元素自動賦值為0,0的ascii碼為null
char *p = str;
puts(str); puts(p); //如果用for () 列印,空字元將被列印出來。(ab );
在這種情況下,str 是指向陣列第一個元素的指標,該指標是常量的,不能對它進行如 ++ --之類的操作。
2.陣列名在函式中,被轉換為一個普通的指向陣列第一個元素的指標變數,可以對它進行運算,如++ --等;例如:
void assignnumbers(int data, int n)
}int main(void)
//不過可以 int *p =num; for ()
return 0;
}結果:0123456789
指標陣列 typename *p[n] : 定義了一個陣列,陣列包含了n個指標變數p[0],p[1]......p[n-1];
例如: *p[3] = ; sizeof(p) = 3*4 =12 (p 為陣列名代表整個陣列) *p[1] = "abc"...
p = &p[0] (p+1)=&p[1] , 符合一般陣列的特性,除了陣列中的元素是指標以外,和一般的陣列沒什麼區別。陣列名p 是個指標常量,不能直接進行指標運算,不過可以傳遞給函式來進行。可以通過p[x] (0<=x p[2] = "hijklm"; 否則,對陣列中的每個指標進行初始化, 必須先分配p[x] 所指向的記憶體空間! 必須對分配結果進行判斷 if ( p[x]=(typename *)malloc(n * sizeof(typename)) == null) 失敗。 lz肯定是把指向陣列的指標和指標陣列混一起了。 2樓:匿名使用者 第一個例子中那個p是陣列名,而不是一個指標變數,所以不能用自增自減運算。 如果你這樣寫就沒問題了: int main() ;char ** q = p; printf("%s",*++q); return 0;} 3樓:湛藍水晶 因為第一種的時候,p是一個char*的陣列,陣列名p是個常量,所以++p是不行的。 第二種情況,p是一個指向char的指標,所以可以執行++p 4樓:匿名使用者 p++是在這個陣列指標上加了1,相當於指標指到了記憶體中陣列的下一區域,也就是"asdfg"後面了 指標在計算機中是一個32位 即四位元組 的一個值,這32位資料代表一個地址,當你宣告瞭一個 char p的指標的時候,自動分配了32位大小的空間儲存指標p,但是,注意,p沒有指向任何空間,所以 p操作是錯誤的,你必須先為 p分配一塊空間才行,具體做法如下 p char malloc sizeof c... 首先,在指標定義時規定了ip是一個指向整形的指標,但是int ip 3 這句話讓ip指向3號地址塊,但是3號地址塊裡的內容是不確定的,所以是錯誤的 int ip 3 是不是這一步驟有問題?指標初始化不能這樣幹!include void main 這就對了。這時候ip指向a,而原先ip是指向3,而3是... 第二句給這個指標分配了100個位元組的空間,不是800。指標確實是指向記憶體塊的地址,指標型別不是確定地址範圍,而是確定單個元素的長度 要不然pbuf 5到底是加幾個位元組?char 就是加 5 1位元組,如果是int 那麼就加5 4位元組 當然要型別啊,沒有型別指標怎麼定址啊。char型別是一個位...求教 指向指標的指標的問題,求教 指向指標的指標的一個問題。
c指標的問題
指標問題char pbuf pbufnew char