一、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...