本文為學(xué)習(xí)使用
在C語言中任意的同類型指針都可以比較大小
指針變量是一個表示[內(nèi)存地址]的長整數(shù)而已,當然可以比較父阻。指向同一個數(shù)組時愈涩,兩個指針的大小就表示誰指向的元素靠前或靠后。如果不是指向同一個數(shù)組加矛,比較大小就只能看出誰指向的內(nèi)存空間地址較小履婉,沒什么意義。數(shù)組名不代表整個數(shù)組斟览,而代表數(shù)組首元素的地址毁腿,輸入字符數(shù)組,可用
cin>> 數(shù)組名;
char s[]="china"; char * p; p=s
;p與s不同若*p=a;
p[i],a[i];//用法一致
(p+i),(a+i);//用法一致
但p為變量,a為常量
補充:指針P+1 = 指針P + sizeof(指針的類型) * 1
int main(void)
{
int a[10] = {0,1,2,3,4,5,6,7,8,9}, *p = a+3;
printf("%d", p[2]);
return 0;
}//輸出5
- 詭異的字符串
- 輸出字符數(shù)組或字符串狸棍,只需cout<<"數(shù)組名"遇\0自動結(jié)束輸出
-
char s[]="china"; char * p; p=s
只需cout<<p
身害,遇\0自動結(jié)束輸出
還要注意,s數(shù)組長度包括 '\0'草戈,p所指向的字符串長度不包括 '\0'塌鸯,p的內(nèi)容為s[0] - 有時候可能會出現(xiàn)自己未賦值的元素被系統(tǒng)賦值為非'\0'
-
cout<<"abcd"+1;
輸出bcd -
注意
char b[111][1000],*m; m=b[0];//此時b[0]是一個字符串名,是一個地址 char a[111],*m; m=&a[0];//此時a[0]是一個字符唐片,是變量名
-
char *language[]={"FORTRAN","BASIC","PASCAL","JAVA","C"};
則表達式*language[1]>*language[3]
比較的是( )
language
是一個字符指針數(shù)組丙猬,language[1]
是這個數(shù)組中的第二個元素,也就是指向B费韭,*language[1]
表示取這個字符指針的值茧球,也就是B。最后就是B和J做比較星持。
- 有時候要注意是指針還是乘號
int a[12] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, *p[4], i;
for (i = 0; i < 4; i++)
p[i] = &a[i*3];
printf("%d\n", p[1][0]);
這樣可以使得*p[4]變成一個二維數(shù)組
*(p[i] + i) = 1 ; // p[i][i] == a[i][i]對角線上的元素賦值1
*(p[i] + 4 - (i + 1)) = 1; //p[i][3-i] == a[i][3-i]另一對角線上的元素賦值1
當需要判斷
*p
所指向元素是否存在
使用while(*p)
更好
while(p)
可能會出錯//不過抢埋,準確來說,這兩個都可能出錯void指針:指向任何類型數(shù)據(jù)的指針可直接賦值給一個void指針督暂,但不能將void指針直接賦給非void型指針變量揪垄,必須強制進行類型轉(zhuǎn)換。實際使用void指針時逻翁,要對它進行類型轉(zhuǎn)換
優(yōu)先級問題
1.成員運算符“.”優(yōu)先于“ * ”,所以當p指向一個結(jié)構(gòu)體變量時,(*p).name;
2.[ ]比 * 優(yōu)先級高饥努,當表示指針數(shù)組時,應(yīng)為int * p[4]
3.注意 * 與自增自減運算符優(yōu)先級一致八回。
4.指向函數(shù)的指針酷愧,與返回指針值的函數(shù)的括位置要注意。
如果有錯誤的地方缠诅,歡迎指正喲溶浴。