一.指標的基本概念
* number = 10;//*
是什麼意思呢?
// 1.通過number這個位址,找到他指向的空間
// 2.到這個空間裡,取出裡面儲存的值
普通變數基本格式:
變數型別 變數名;
指標變數基本格式:
變數型別* 指標變數名
指標裡面存的是別的變數的位址%p來列印值是0x開頭的,16進製制數字
指標變數在記憶體中佔8個位元組
int* pointer;
//定義乙個指標, *只是乙個識別符號,不屬於變數名字,沒有任何意義
> 定義乙個指標變數的時候, *只是乙個識別符號,不屬於變數名字,也不屬於變數型別名字,沒有任何意義
> *放在乙個指標變數的前面的時候,是什麼意思呢?
1.通過指標裡面存的這個位址,找到他指向的空間
2.到這個空間裡,取出裡面儲存的值
int num2 = 16127;
int * p = &num2;
*p = 66;
printf("%d",num2);
// num2 = 20;//直接改變num2的值
*.指標的注意點
1.指標變數儲存變數的位址的型別,必須和指標變數的型別一樣
int* p;
// p只能儲存int型別變數的位址
錯誤寫法:
doubled =
10.1;
p = &d;//取出了(double型別變數)d的位址,賦值給了(只能儲存int型別變數的位址)p
2.指標變數只能儲存位址,不能直接把常量賦值給他
int *p1;
int num = 10;
p1 = #//
正確的
p1 =
250;//理論上沒錯,但實際開發不這樣寫
3.指標變數沒有初始化,沒有儲存任何變數的位址,沒有指向任何的變數,不能間接訪問
int *p2;
printf("p2 = %d\n",*p2);//p2
是個野指標
4.指標變數也是變數,所以也是可以定義的同時初始化
// int *p3;
// int num2 = 10;
// p3 = &num2;
int *p3 = #
5.多個指標變數同時指向同乙個變數(多個指標變數同時儲存乙個變數的位址)
int b = 10;
int *p5 = &b;
int *p6;
p6 = &b;
6.指標的指向可以改變(乙個指標可以改變裡面儲存的位址,只要是型別匹配)
int c = 20;
p6 = &c;
7.不使用的指標,就把指標清空置成null
int e = 10;
int *p7 = &e;
printf("%d\n",*p7);
// 清空指標
p7 = null;
// p7 = 0;
二.指向指標的指標
inti = 10;
//普通變數型別
int * ip = 202;//
指標也是資料型別
int** ipp;//ipp 這個指標變數,就是指向指標的指標
ipp = &ip;
三.指標與陣列
int ages[5] = ;
訪問陣列元素有3種方式(其實這3種方式,在編譯的時候,都是一樣的)
1.陣列名[角標]
2.指標變數名[角標]
3.*(指標變數名 + 角標)
1.1 printf("ages[2] = %d\n",ages[2]);
2.1 printf("p[2] = %d\n",p[2]);
3.1 printf("ages[%d] = %d\n",i,*(p + i));
重點:指標變數+幾,是加上指標變數型別所占用的位元組數
陣列名字作為函式的引數傳遞的時候,會把陣列名自動轉換成位址
所以通過指標來接收,指標指向的是第0個元素
void
printarray(
int*array)//遍歷乙個陣列,還是需要從外界傳過來元素個數
*(array + 3) = 0;
}int main(int argc, const
char * argv)
;// int length = sizeof(ages)/sizeof(int);
// printf("length = %d\n",length);
printf("ages[3] = %d\n",ages[3]);
printarray(ages);
printf("ages[3] = %d\n",ages[3]);
return0;}
四.指標與字串
char * 儲存的是不可變字串 char *是乙個常量
char name char陣列裡面儲存的是可以變的字串
常量區存放的特點:乙個的常量位址是一樣的
char *name2 = "lty";
char *name3 = "lty";
char *name4 = "lty";
//name2、name3、name4三個指標都是指向同一塊位址
位址是變化的
char name = "lty";
char name5 = "lty";
五.指標作為函式的返回值
//注意點:當用陣列儲存字串的時候,是放在棧裡的,當函式執行完畢就釋放了
char * test2()
int main()
黑馬程式設計師 C語言 指標
asp.net android ios開發 net培訓 期待與您交流!指標 指標是c語言中非常重要的資料型別 指標變數的定義 int p int是指標指向資料的型別 p是指標變數名稱 只是用來表示變數為指標變數 指標的使用 int a 10 int p p a 或者p a 表示將變數a的記憶體位址賦...
黑馬程式設計師 c語言指標
ios培訓 android培訓 期待與您交流!指標的定義 定義指標和定義乙個變數類似 資料型別 指標變數名 如 int p 表示定義乙個指向整形變數的指標 使用如下 int a 8 int p p a 指標變數 p中存放a的位址,可以通過p中存放的位址,可以訪問變數a中的值。訪問指標變數中存放的位址...
黑馬程式設計師 C語言指標
android培訓 ios培訓 期待與您交流!指標是c語言中非常重要的資料型別,如果你說c語言中除了指標,其他你都學得很好,那你乾脆說沒學過c語言。l void change int n 函式呼叫完畢後,改變實參的值 l 分析 修改實參的值 找到儲存空間 位址l 類名識別符號 指標變數名 l int...