指標 C之精華 續1

2021-07-04 01:12:27 字數 3106 閱讀 2710

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...