指標易錯知識點小結

2021-06-26 11:40:54 字數 1824 閱讀 9541

一、c語言指標知識點小結

1、初始化指標的時候會自動分配八個位元組(任何型別的指標)

1>    定義指標變數的時候,如int *p;  僅僅是代表該變數是指標變數,可以認為(int * )p;

2>   p = &a;是正確的。

int *p = &a; 正確。表示把a的位址賦給p,是的指標p指向a.

*p = &a;這條語句是錯誤的,它表示的是把a的位址賦給*p所指向的變數,意味著把a的位址賦給a自己。 3

>   如定義:int ages[5];

int *p;

p = ages;

現在可以有三種方式去訪問ages陣列:

(1)陣列名[下標]: ages[1];

(2)指標變數名[下標]: p[1];

(3)*( p + 1 ); 指標變數加一,究竟加多少取決於指標的型別,如果是int型別指標,實際上該位址增加了四個位元組。

2、

指標與字串。

1>    定義字串的兩種方式:

(1) 利用陣列,char name = 「 black 」;

特點:字串裡的字元可以修改,常用在經常需要修改內容的場合。

(2) 利用指標,char *name= 「 black 」;

特點:該字串其實是乙個常量字串,放在記憶體中的常量區,裡面的字元不可以修改;

常用在字串需要經常用到而且內容不需要修改的場合。

輸出:printf("%c",*name);    // b;               *name指向字串首位址。

printf("%s",name);     // black;              因為%s會從該首位址開始依次輸出,直到『\0』;

2>    定義指標字串陣列;

3、

指標與函式和結構體。

1>    返回指標的函式:

char *test()

main函式裡面寫 char *name = test (); 就可以用name來接受test中返回的指標。相當於 char *name = 「rose」;;

2>    指向函式的指標:

如:void (*p) ();  //(*p)是固定寫法,代表指標變數p將來肯定是指向函式,左邊的void代表指標變數p指向的函式沒有返回值,右邊的括號表示指標變數p指向的函式沒有形式引數。

p = test; // 指標變數p指向了test函式。

接下來呼叫方式有三種:

(1) (*p)();   // 先利用指標間接呼叫函式test();

(2) p();     //也是呼叫test()函式;

(3)test();    //直接呼叫

舉例:double haha(  double d,  char  *s, int ){}

main()

3>    指向結構體的指標:

如: struct student

struct student stu = ;

struct student *p ;      //指標p將來指向struct student型別資料。

p = &stu;

3種訪問方式:

(1)    printf("age = %d,no = %d\n", stu.age,   stu.no);

(2)printf("age = %d,no = %d\n",(*p).age, (*p).no);

(3)printf("age = %d,no = %d\n",p->age, p->no);

指標知識點及易錯點總結

本文示例 環境為 vs2017下純c c 因為型別檢測增強,會直接標紅,需要強轉才能執行 1.指標 1.1指標簡介 指標是一種資料型別,自身占用記憶體空間 win32平台,所有指標占用4位元組記憶體空間 指標儲存的值是記憶體位址的編號。指標變數指向誰,就把誰的位址賦值給指標變數。指標通過 解引用,操...

C易錯知識點

參考酷客網,對其進行了簡單整理 1 下面的程式並不見得會輸出 hello std out 你知道為什麼嗎?include include intmain return 0 參 stdout 和stderr 是不是同裝置描述符。stdout 是塊裝置,stderr 則不是。對於塊裝置,只有當下面幾種情...

Java 易錯知識點

1 以下程式執行的結果是 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 classx classy publicclasszextendsx publicstaticvoidmain string args zyxx zyxy yxyz xyz...