1)、先取*p值,後使p值加1:*p++與*(p++)等價。(++和*同優先順序,結合方向自右而左)
2)、先使p值加1,後取*p值:*(++p)
1、用陣列名做函式引數
c編譯時將形參陣列名
作為指標變數來處理的,所以以下2個函式的定義是等價的:
f( int arr
, int n )
f( int*arr, int n )
2、多維陣列與指標
int a[3][4]=; 或
int a[3][4]=,,};
a 代表首行(第0行)的首位址,即&a[0][0];a+1代表第1行的首位址;
a[0] 代表首行(第0行)的首位址,即&a[0][0];a[0]+1代表第0行第1列的元素的位址;
a[1]和*(a+1)等價(&a[1][0]);a[1]+1=*(a+1)+1=&a[1][1]
3、字串 與 指標
1)、在c中,字串是被當做字元陣列來處理的。
字串結束標誌:'\0' (ascii值為0,即空操作字元nul)
int a[10]=;
char c[10]=; 與
都是定義字元陣列,但是前者陣列長度是10,後者長度是11(因為字串常量的最後由系統加上了乙個'\0'); 即
與 char c[10]=;等價。
為了使處理方法一致,在字元陣列中常常人為地加上乙個'\0'。這樣做,便於引用字元陣列中的字串。
例如:char c="pascal program";
若想用乙個新的字串代替原有的字串,從鍵盤向字元陣列輸入:hello
如果不加'\0'的話,字元陣列中的字元如下:
hellol program
2)、字元陣列的輸入輸出
兩種方法:
1)、%c:逐個字元輸入輸出
2)、%s:整個字串 例:
char c="china";
printf("%s",c); //注意輸出項是字元陣列名
輸入字串時,系統把空格字元作為輸入的字串之間的間隔符。 例:
char str[13];
scanf("%s",str);
如果輸入以下12個字元:
how are you?
只有how和\0被儲存到str中。
·3)
訪問乙個字串的方式有2種:
(1)、字元陣列存放乙個字串
char str="i love china!";
對字元陣列智慧型對各個元素賦值,
不能用以下辦法對字元陣列賦值:
char str[14];
str="i love china!";
即
陣列可以在定義時整體賦初值,但不能在賦值語句中整體賦值
。(2)、用字元指標指向乙個字串
char*str="i love china!"; (實質是把字串第乙個元素的
位址賦給str,不要誤以為把字串賦給str) 與
char *str;
str="i love china!" (特別注意不是*str !! 因為實質賦值的是位址)
等價;
2)、字元指標作函式形式引數
1、字元陣列作函式形參
char a="i am a boy";
char b="you are a engineer";
char *c=a;
char *d=b;
void function ( char from , char to )
a、字元陣列作實參
function(a,b);
b、字元指標變數作實參
function(c,d)
2、字元指標變數做函式形參
char a="i am a boy";
char b="you are a engineer";
char *c=a;
char *d=b;
void function( char *from, char *to);
呼叫:function(c,d);
注意:
1、指標變數的值是可以改變的,而陣列名雖然代表位址,但它是常量,它的值是不能改變的;
void main()
輸出結果:china!
而以下是錯誤的:
char a="i love china!";
a=a+7;
printf("%s",a);
2、避免不可預料的情況。
char str[10];
scanf("%s",str);
是可以的,但是下面的是危險的:
char *str;
scanf("%s",str);
因為&str雖然分配了,但是str的值是不可預料的,隨意改變可能破壞系統。
可以這樣做:
char *a, str[10];
a=str;
scanf("%s",a);
C語言基礎之指標續
一 指標 1 指標與陣列 include int main int p 下面兩句其實是等價的,陣列名本身就代表陣列位址 p ages p ages 0 printf p p n p 指標指向陣列首元素,因此列印的是陣列位址 printf p d n p 指標指向陣列首位址,其指向位址中的值就是age...
C語言中精華 指標
這篇c語言指標學習經驗總結主要是我入職以來學習c指標過程中的點滴記錄。文件裡面就不重複書上說得很清楚的概念性東西,只把一些說得不清楚或理解起來比較費解的東西做一下講解,希望能達到以下三個目的 1.通過寫這些東西,把我腦袋中關於c的模糊的知識清晰化。2.給初轉c的同事們一點提示和幫助。3.也希望各位前...
c高階之指標1
1指標 指標的實質就是個變數,它跟普通變數沒有任何區別,指標完整的名字是 指標變數。int a與int p 中a與p繫結的記憶體空間都是4個位元組 指標出現是為了間接訪問 cpu間接定址是cpu設計時決定的 p與 x列印指標,列印出的值是一樣的 下面四種在效果上是一樣的,編譯器不會報錯 int p1...