黑馬程式設計師 C語言 指標

2021-06-22 06:11:23 字數 2983 閱讀 9820

一.指標的基本概念

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