一、指標的定義
1.指標是變數的一種,裡面是乙個位址。單元的位址就是指標內容;
所有型別的指標長度都是4位元組;
2.定義指標變數:(1) char *str = "hello"; //str指向hello字串
(2) int a = 1;
int *p = &a;
* 的含義:定義時用* :表示後面的變數是乙個指標
使用時用* :表示取值
例如:交換a, b的值
#include
void swap(int *x, int *y)
int main()
二、指標與變數
1.指標運算
(*p1)++, *p1++的區別:
(*p1)++是p1的值加1;
*p1++是先求*p1的值,然後再p1++,指標指向下乙個元素;
利用指標運算實現庫函式strcpy :
#include
char *mystrcpy(char *str, const char *ptr)
int main()
2.不同型別與0值比較
int *p=null; //空指標
(1)int型:if(n == 0)或者 if (n != 0)
(2)float型:const float epsinon = 0.00001;
if ((n >= - epsinon ) && (n <= epsinon ))
(3)bool型別:if (flag)或者if ( ! flag)
(4)指標型別:if (n == null)或者if (n != null)
3.指標變數的使用步驟
1. 定義指標變數;
2.給指標變數賦位址;
3.正常使用指標進行運算;
例如:
#include
#include
#include //malloc的標頭檔案
int main()
strcpy(fp, "helloworld");
printf("%s\n", fp);
return 0;
}
三、指標與陣列
1.陣列元素和指標
陣列的指標是指數組的起始位址,陣列元素的指標是陣列元素的位址。
例如:int a[10]; //定義a為包含10個整型資料的陣列
int *p; //定義p為指向整型變數的指標
p=&a[0]; //把a[0]元素的位址賦給指標變數
#include
int main()
;
int *p = a;
for(i = 0; i < 10; i++)
printf("\n");
char *q = "hello";
for(i = 0; i < 5; i++)
printf("\n");
return 0;
}
2.printf("%d ", *(p + i)); //指標法訪問陣列
printf("%d ", a[ i ]); //陣列下標法訪問陣列
3. 指標陣列
char *string = ; //本質是陣列, 每個元素都是乙個指標
printf("%s\n", string[0]); //通過陣列方式訪問指標
printf("%s\n", string[1]);
printf("%s\n", string[2]);
若為printf("%s\n", string); 則列印亂碼。因為string是陣列名,也是陣列首元素的位址,陣列首元素是指標。
4. int a[5] = ;
int *p1 = (int*)(&a + 1); //列印隨機值 。&a是陣列的位址,+1加20位元組
int *p3 = (int*)(a + 1); //列印2 。 a是陣列名也是陣列元素的首位址,a+1指向下乙個元素
附上今日筆記:
7月19日學習 指標與陣列
函式的指標 可通過該指標呼叫該函式 定義 函式指標是函式的物理入口位址,即在編譯時,分配的物理入口位址。格式 型別 指標變數名 int p 這裡的型別是指函式返回值型別。呼叫 指標變數名 實參列表 p 或者p 對於函式指標,p p n等等無意義。函式返回指標的注意事項陣列 同質,有序,連續。注意下標...
7月25日學習日誌 張蓉婷
今日學習任務 用韌體庫點亮乙個燈,stm32韌體庫程式設計及gpio,rrc時鐘,systick系統定時器 今日任務完成情況 詳細說明本日任務是否按計畫完成,開發的 量。今日任務已按計畫完成。在老師的指導下學會使用韌體庫程式設計實現led燈的點亮和閃爍。systick定時器設定和實現 rrc系統時鐘...
7月13日學習日誌
學習日誌 姓名 郭富民 日期 2018 7 13 今日學習任務c語言的結構體,聯合體,鍊錶 今日任務完成情況c語言的結構體,聯合體的任務基本完成,能跟上老師的進度。今日開發中出現的問題彙總 結構體在使用時,只是宣告,不是定義,沒有分配空間。struct student就是一種資料型別。結構體在記憶體...