指標學習筆記(上)

2021-07-24 11:03:07 字數 4315 閱讀 5785

關於直接複製**出錯原因的解釋:以下**都是經過我編譯通過的。如果出現問題,一可能是貼上複製時出現錯誤,二可能是與你的編譯器有衝突。

1.指標的定義

int i=2;

int *p=&i;//int *p;p=&i;

所以:當使用scanf函式的時候,就不需要&(取址運算子)

2.  指標與一維陣列的關係

和*是乙個作用的,定義陣列的兩個方法

int a;

int *p=a;//int *p=&a[0];

p作為位址和a[0]的位址是一樣的,所以a[i]=*(p++);p++=&a[i++];

3. 指標與二維陣列的關係

二維陣列的定義有點特殊,首先二維陣列必須要又有乙個確定的值。也就是說

int a=;//該定義是不合法的。

int a=,};//該定義是不合法的。

int  a[2]= ;//該定義是不合法的。

int  a[2][3]= ;//該定義是合法的。

int  a[3]= ;//該定義是合法的。

所以在定義二維陣列作為函式引數的時候,必須要有乙個確定的值

void pri(int a[3],int m,int n); //該定義是可行的。

例項**:

#include "stdio.h"

void seedd(int a[3],int m,int n);

int main()

; seedd(s,2,3);

return 0;

}void seedd(int a[3],int m,int n)

} for(int m=0;m

4.  指標陣列與陣列指標

陣列指標:陣列中的元素指向某一資料型別的指標,也就是,通過該指標可以找到該陣列中的每個元素的位置。

記法:char*array[4]=

例項**:

#includevoid main()

; for (int i=0;i<4;i++)

printf("\n"); }

}//輸出結果:

//zhangsan

//lisi

//wanger

//mazi

type *p[number]=>p[number];

具體操作類似

指標陣列:指向具有某類元素的陣列,也就是說通過指標可以找到該陣列。

記法:char  (*array)[4];

例項**:

#includevoid main()

; int (*a)[4];

a=s;

for (int i=0;i<4;i++)//與下面的相似,可以寫成函式,避免重複

int ss[4]=;

a=ss;

for (int j=0;j<4;j++)

}

改變後的**:

#includevoid p(int (*s)[4]);

void main()

; int (*a)[4];

a=s;

p(a);

int ss[4]=;

a=ss;

p(a);

}void p(int (*s)[4])

}

5.  指標函式與函式指標

指標函式中主要包括兩個方案:乙個是函式引數是指標,另乙個是函式返回乙個指標。

當函式的引數為指標時,由上面的情況可以知道,實際上是引數可以陣列的形式表達出來。

也就是說函式得引數為指標等價於函式的引數為陣列或者單一值。

例項**:

#include "stdio.h"

int seekmax(int *a,int b);//該引數為指標

int main()

; int b=seekmax(a,4);

printf("%d",b);

return 0;

}int seekmax(int a,int b)//該引數為陣列

; int b=*seekmax(a,4);

printf("%d",b);

return 0;

}int *seekmax(int *a,int b)//該引數為指標

void a()

void b()

void c()

void d()

格式:宣告:(*function)(para,para…) //指標函式

替換:function=will substitude//函式名替換即可

使用:(*function)(para,para…)//使用函式指標

6.字串的處理

c語言中字串的處理需要利用到字元陣列因為在c中沒有string 型別。字串的操作主要包括以下幾個方面

a.遍歷每個字元charat

#include "stdio.h"

char charat(char *str,int i);

int main()

char charat(char *str,int i)

b.計算字串的長度

#include "stdio.h"

int length(char *str);

int main()

int length(char *str)

return len;

}

c.求某個字元在字串的第一次出現的位置

#include "stdio.h"

int firstindexof(char *str,char ch);

int main()

int firstindexof(char *str,char ch)

return len;

}

d.求某個字元在字串的最後一次出現的位置

#include int lastindexof(char *str,char ch);

int main()

int lastindexof(char *str,char ch)

//利用str長度倒著迴圈

for (int j = i-1;j >=0;j--) }

printf("can`t find..\n");

return 0;

}

e.統計某個字元的個數

#include int countcharnumber(char *str,char ch);

int main()

int countcharnumber(char *str,char ch)

temp=*str++;

} return i;

}

f.比較兩個字串的大小

#include int comparestr(char *str1,char *str2);

int main()

int comparestr(char *str1,char *str2)

while(*str2++!=null)

if (i>j)

else if (i

限於篇幅原因,就總結到這裡啦。

下面的內容一部分是把字串的處理補充完。

包括:一、連線兩個字串concatstr(char *str1,char *str2)

二、刪除字串的某個字元removecharfrom(char* str,char ch);

三、從某個位置擷取字串substring(char *str,int i);

四、從某個字元開始擷取字串substring(cahr *str,char ch);

五、擷取固定長度的字串substring(char *str,int start,int end);

六、按照固定方式(空格,或者「_」等)分離單詞splitstr(cahr *str,char ch);

七、字串插入某個字元insertstr(char *str,int place,char ch);

等等。然後就是下文的主要內容:

a:指標與結構體

b:指標與檔案

c:鍊錶是實現

d:拓展與特別注意。

JDBC學習筆記 上篇

二 獲取連線connection 三 得到執行sql語句的物件statement 四 執行sql語句,並返回結果 五 處理結果集 查詢得到的resultset 總結記錄一下jdbc的學習筆記,mysql版本5.7,驅動版本5.1.47 1.註冊驅動的方式如下 drivermanager.regist...

學習筆記(上下界)

關於上下界網路流學習筆記 無源無匯可行流 首先對於無源無匯,也就是迴圈流,是沒有最大流之說的。對於每一條邊有乙個流量下界down,和流量上界up,那我們使得此邊流量為up down,但這樣因為每條邊減少的流量不一樣,所以會導致流量不守恆,解決方式 因為流入每個點的流量都被剪掉了乙個下界,所以從超級源...

CSS3學習筆記 上

1 css是什麼?css是cascadingstylesheets 級聯樣式表 的縮寫。2 css可以用來做什麼?css是一種樣式表語言,用於為html文件定義布局。例如,css涉及字型 顏色 邊距 高度 寬度 背景影象 高階定位等方面。3 css跟html的區別在 html用於結構化內容 css用...