應用場景:
基本資料型別傳入函式引數不能改變其值,用指標就可以
變數型別 變數名; 格式:變數型別 *變數名; 定義了乙個指標變數p 指標變數只能儲存位址 指標就乙個作用:能夠根據乙個位址值,訪問對應的儲存空間 指標變數p前面的int:指標變數p只能指向int型別的資料 指標的寫法:int *p;int a = 90; p = &a; // 指標變數p指向了變數a 錯誤寫法:/* 不建議的寫法, int *p只能指向int型別的資料 int *p; double d = 10.0; p = &d;*/ /* 指標變數只能儲存位址 int *p; p = 200; */錯誤寫法 /* 指標變數未經過初始化,不要拿來間接訪問其他儲存空間 int *p; printf("%d\n", *p); */錯誤寫法
定義變數時的*僅僅是乙個象徵,沒有其他特殊含義 int *p = &a; 這個時候的*的作用:訪問指向變數p指向的儲存空間 *p = 20; 指向指標的指標:int a = 10; int *p = &a; int **pp = &p; (*pp) == p *(*pp) == *p = a **pp = 20; printf("%d\n", a); //int ***ppp = &pp; **pp == *p = a
p = null; //
清空指標後,不能再間接訪問其他儲存空間
用指標傳遞引數:交換示例
1. 不能交換外面實參的值,僅僅是交換了內部指標的指向
void swap(int *v1, int *v2)
2. 完成兩個整型變數值的互換
void swap(int *v1, int *v2)
3. 交換的只是內部v1、v2的值
void swap(int v1, int v2)
指標應用:呼叫乙個函式,返回多個值
int sumandminus(int n1, int n2, int *n3)
%d int
%f float\double
%ld long
%lld long long
%c char
%s 字串
%zd unsigned long
任何指標都占用8個位元組的儲存空間
指標和陣列:
1.陣列元素的訪問方式 int ages[5]; int *p; p = ages; 1> 陣列名[下標] ages[i] 2> 指標變數名[下標] p[i] 3> *(p + i) 2.指標變數+1,位址值究竟加多少,取決於指標的型別 int * 4 char * 1 double * 8 利用乙個指標來接收乙個陣列,指標變數array指向了陣列的首元素 void change(int *array) p = &ages[0]; 陣列名就是陣列的位址,也是陣列首元素的位址 p = ages;
指標變數p指向了陣列的首元素
%p輸出指標裡面儲存的位址值
指標和字串
1.常量區
存放一些常量字串
2.堆物件
3.棧存放區域性變數
定義字串的2種方式
1>
利用陣列
char name = "itcast";
* 特點:字串裡面的字元是可以修改的
* 使用場合:字串的內容需要經常修改
2>
利用指標
char *name = "itcast";
* 特點:字串其實是乙個常量字串,裡面的字元是不能修改
* 使用場合:字串的內容不需要修改,而且這個字串經常使用
// 指標陣列(字串陣列)
char *names[5] = ;
// 二維字元陣列(字串陣列)
char names2[2][10] = ;
返回指標的函式
返回指標的函式的一般形式為:型別名 * 函式名(引數列表)
指向函式的指標的定義
定義的一般形式:函式的返回值型別 (*指標變數名)(形參1, 形參2, ...);
1.(*p)是固定寫法,代表指標變數p將來肯定是指向函式
// 左邊的void:指標變數p指向的函式沒有返回值
// 右邊的():指標變數p指向的函式沒有形參
void (*p)();
// 指標變數p指向了test函式
p = test;
p();
//(*p)(); // 利用指標變數間接呼叫函式
2.定義指標變數指向sum函式
左邊的int:指標變數p指向的函式返回int型別的資料
右邊的(int, int):指標變數p指向的函式有2個int型別的形參
int (*p)(int, int);
定義指向函式的指標
double (*p)(double, char *, int);
p = haha;
或者double (*p)(double, char *, int) = haha;
如何間接呼叫函式
1> p(10.7, "jack", 10);
2> (*p)(10.7, "jack", 10);
使用注意
由於這類指標變數儲存的是乙個函式的入口位址,所以對它們作加減運算(比如p++)是無意義的
指向函式的指標變數主要有兩個用途:
呼叫函式
將函式作為引數在函式間傳遞
ZY C語言結構體
陣列 只能由多個相同型別的資料構成 結構體 可以由多個不同型別的資料構成 1.定義結構體型別 struct person 錯誤寫法 struct person p2 p2 結構體要在定義的時候初始化 注意 1.定義結構體型別 並不會分配儲存空間 2.定義結構體變數 真正分配儲存空間 補齊演算法 對齊...
C語言 指標 數字 指標 指標
指標 數字 指標 1 指的是加乙個單元格,不同的指標型別需要調整,調整的權重為sizeof 去掉乙個 注意 arr i arr i eg double dp brr dp 乙個單元格是八個位元組 char cp crr cp 乙個單元格是乙個位元組 只有 指標 指標 有意義 1 先算出位元組數 2 ...
C語言指標 初見指標
種一棵樹最好的時間是十年前,其次是現在。如有錯誤請指出,謝謝 一 指標變數 在說指標變數之前,先說一下位址這個東西。現在大多數計算機裡都是記憶體被劃分為位元組,然後每個位元組可以儲存8位資訊,比如01010101,每個位元組有唯一的位址。有的變數佔據乙個或多個位元組記憶體空間,把第乙個位元組的位址看...