亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

整理C語言中各種類型指針的特性與用法

2020-01-26 14:39:46
字體:
來源:轉載
供稿:網友

指針為什么要區分類型:

在同一種編譯器環境下,一個指針變量所占用的內存空間是固定的。比如,在16位編譯器環境 下,任何一個指針變量都只占用8個字節,并不會隨所指向變量的類型而改變。

雖然所有的指針都只占8個字節,但不同類型的變量卻占不同的字節數。

一個int占用4個字節,一個char占用1個字節,而一個double占用8字節;

現在只有一個地址,我怎么才能知道要從這個地址開始向后訪問多少個字節的存儲空間呢,是4個,是1個,還是8個。

所以指針變量需要它所指向的數據類型告訴它要訪問多少個字節存儲空間。

也就是說,如果不指定指針的類型,那么當指針指向一個變量的時候,她從首地址開始,但是它不知道什么時候停止,它不知道要訪問多少個存儲空間。比如有一個char類型的變量,我用一個指針指向它,但是這個指針我設置成int類型,這樣一來這個指針就會向后訪問四個字節的存儲空間,很明顯得到的結果不是char類型應該得到的,所以要區分類型。

只有指針是可以運算(移動)的,數組名是不可以的。

 int x[10]; x++; //illegal int* p = x; p++; //legal

兩指針變量相減所得之差是兩個指針所指數組元素之間相差的元素個數。

實際上是兩個指針值(地址)相減之差再除以該數組元素的長度(字節數)。
(pointer2地址值 - pointer地址值) / sizeof(所指向數據類型)
指針之間可以相減,但不可以相加(相加無意義)。
定義字符串:

字符數組:

char string[] = "hello";printf("%s/n",string);

字符串指針指向字符串:

char *str = "hello"

使用字符數組來保存的字符串是存在”?!崩锏?,所以它是可讀可寫的,所以我們可以修改字符數組里的某個元素的值。

但是,使用字符指針來保存字符串,它保存的是字符串常量地址,"常量區"是只讀的,所以是不可改的。

char *str = "hello";*(str+1) = 'w'; // 錯誤

使用注意:

char *str;scanf("%s", str); /* str是一個野指針,他并沒有指向某一塊內存空間,所以不允許這樣寫。如果給str分配內存空間是可以這樣用的 */ /********* 數組的方法****************/  char name[20];  scanf("%s",name);  /************* 給字符針針分配內存空間的辦法***********/  char *name;  name=(char*)malloc(50);   //此時name已經指向一個剛剛分配的地址空間。  scanf("%s",name);

指針函數(是函數,返回值是指針)注意:

如果函數返回一個字符串,那么如果用一個數組以下面的形式來接的話,是會報錯的:

char *test() {  return "hello";}int main(int argc, const char * argv[]) {  char names[10];  names = test();  return 0;}

這是因為,返回的字符串相當于一個這樣的數組:{‘h', ‘e', ‘l', ‘l', ‘o', ‘/0'},但是前面我們說過,數組如果在定義的時候沒有用{}這種方式初始化,那么后面就不能再用這種方式初始化了,所以會出錯。

解決方法:將char names[10]改為char *names或者char names[10]直接等于test()。

函數指針(是指針,指向函數):

格式:函數的返回值類型 (*指針變量名) (形參1, 形參2, ...);

int sum(int a,int b){ return a + b;}int (*p)(int,int);p = sum;

應用場景:

調用函數

將函數作為參數在函數間傳遞

函數指針能更靈活:

int minus(int a, int b) {  return (a - b);}int add(int a, int b){  return (a + b);}int myFunction(int a, int b, int (*funcP) (int, int)){  return funcP(a, b);}int main(){  int minusResult = myFunction(10, 20, minus);  int addResult = myFunction(10, 20, add);   ...  return 0;}/*  函數指針能讓程序更靈活,比如后續有乘、除函數的時候,只需實現這兩個函數然后在主函數調用myFunction函數即可。如果是多人協作,不同的人寫不同的功能,如果我們來寫myFunction那么基本就不用修改就可以一直使用,非常靈活。*/

技巧:

1、把要指向函數頭拷貝過來

2、把函數名稱使用小括號括起來

3、在函數名稱前面加上一個*

4、修改函數名稱

使用注意:

由于這類指針變量存儲的是一個函數的入口地址,所以對它們作加減運算(比如p++)是無意義的。

如上例,如果想使用p這個函數指針,可以直接向使用sum一樣:

int result = p(10, 10);

也可以這樣:

int result = (*p)(10, 10);

結構體是一種自定義數據類型,注意,它是數據類型。

struct Student {   char *name;   int age; }; struct Student stu;

注意,結構體的后面是有 ; 的。

在使用結構體類型的時候,要加上struct關鍵字。

定義結構體類型的同時定義變量:

struct Student {  char *name;  int age;} stu;

這種在定義的同時也定義了變量,就相當于:

struct Student {   char *name;   int age; }; struct Student stu;

定義結構體類型的同時定義變量,以后如果想繼續使用這個結構體類型,仍然可以使用常規的方式定義:

struct Student newStu;

匿名結構體定義結構體變量:

struct {  char *name;  int age;} stu;

這種匿名方式與上面的方式相比,雖然看起來更簡潔(省去了結構名),但是要注意,這只能定義一個stu變量,而不能再定義新的變量,因為結構名沒有了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91国内产香蕉| 超碰日本道色综合久久综合| 精品国产老师黑色丝袜高跟鞋| 国产精品电影久久久久电影网| 亚洲国产成人一区| 亚洲免费小视频| 91中文在线观看| 精品中文字幕久久久久久| 色黄久久久久久| 亚洲欧美日韩中文视频| 国产成人亚洲综合| 国产日韩欧美在线观看| 91视频国产高清| 成人欧美在线视频| 久久久精品999| 亚洲午夜精品久久久久久久久久久久| 成人免费观看网址| 亚洲精品久久久久久下一站| 欧美性极品少妇精品网站| 国产精品黄视频| 日韩在线免费观看视频| 国产精品久久久久久久久男| 久久精品电影网站| 欧美福利视频在线| 欧美性猛交xxxx免费看漫画| 久久久999国产| 黑人巨大精品欧美一区免费视频| 欧美性xxxxxxx| 欧美亚洲成人xxx| 亚洲国产成人精品久久| 精品偷拍一区二区三区在线看| 国产精品一区二区三区久久久| 久久69精品久久久久久久电影好| 欧美成人免费观看| 欧美高清视频免费观看| 国模视频一区二区三区| 国产精品6699| 亚洲一区第一页| 亚洲成人精品久久久| 精品偷拍各种wc美女嘘嘘| 国产美女扒开尿口久久久| 亚洲国产成人久久| 国产99视频精品免视看7| 日韩精品中文字幕视频在线| 中文欧美在线视频| xxx一区二区| 国内外成人免费激情在线视频| 欧美猛交ⅹxxx乱大交视频| 欧美最猛性xxxxx(亚洲精品)| 亚洲欧美在线x视频| 亚洲欧美日韩中文在线| 国产亚洲精品美女久久久久| 久久久久久久影视| 91色p视频在线| 国产精品中文字幕在线观看| 欧美性猛交xxxx免费看漫画| 尤物yw午夜国产精品视频明星| 少妇精69xxtheporn| 97久久精品视频| 欧美日韩一区二区免费视频| 国产精品一区二区av影院萌芽| 欧美三级免费观看| 久久91精品国产91久久跳| 亚洲综合中文字幕在线| 日韩中文字幕视频在线| 久久九九热免费视频| 国产视频一区在线| 亚洲一区中文字幕在线观看| 亚洲毛片在线免费观看| 亚洲高清福利视频| 国产日韩欧美在线看| 成人性生交大片免费观看嘿嘿视频| 欧美有码在线视频| 色综合久久88色综合天天看泰| 精品无人区乱码1区2区3区在线| 欧美黑人一区二区三区| 欧美黑人一区二区三区| 欧美综合在线第二页| 国产精品免费久久久| 欧美大片在线看| 国产精品老女人视频| 精品国产91久久久久久| 国产精品高潮视频| 亚洲精品天天看| 91精品国产电影| 少妇高潮久久77777| 久久久精品网站| 伊人伊成久久人综合网站| 国产精品成人av性教育| 午夜精品一区二区三区视频免费看| 神马久久桃色视频| 日韩一区二区精品视频| 欧美精品一本久久男人的天堂| 欧美另类极品videosbestfree| 亚洲有声小说3d| 国产一区视频在线播放| 成人黄色生活片| 国产欧美精品久久久| 最近2019年日本中文免费字幕| 中文字幕亚洲综合| 51ⅴ精品国产91久久久久久| 欧美黑人又粗大| 久久精品国产99国产精品澳门| 深夜福利日韩在线看| 亚洲美女在线视频| 国产精品久久久久久亚洲影视| 成人免费xxxxx在线观看| 色综合伊人色综合网站| 日日狠狠久久偷偷四色综合免费| 亚洲老司机av| 国产成人一区二| 国产欧美日韩综合精品| 国产精品扒开腿做爽爽爽视频| 亚洲精品国产精品国自产在线| 日韩美女视频中文字幕| 欧美黑人极品猛少妇色xxxxx| 国产精品视频内| 亚洲成人av在线| 在线激情影院一区| 俺去亚洲欧洲欧美日韩| 欧美一级片在线播放| 亚洲国产精品va在线观看黑人| 国内精品久久久久| 日韩av在线播放资源| 亚洲电影免费观看高清完整版在线| 韩国一区二区电影| 国产精品美女无圣光视频| 国产精品亚洲自拍| 青青青国产精品一区二区| 久久影视免费观看| 久久久久久一区二区三区| www.欧美精品一二三区| 久久国产精品久久精品| 国产精品一区二区女厕厕| 欧美一级免费看| 国产精品av在线播放| 久久久精品网站| 国产v综合ⅴ日韩v欧美大片| 亚洲毛片在线观看.| 精品国产一区二区在线| 久久99热精品这里久久精品| 欧美性猛交xxxx久久久| 日韩精品在线影院| 欧美黑人xxx| 96sao精品视频在线观看| 成人午夜黄色影院| 日韩av一卡二卡| 96国产粉嫩美女| 欧美在线影院在线视频| 欧美精品videos| 中文字幕日韩在线观看| 日韩精品免费视频| 国产有码在线一区二区视频| 精品久久久久久久大神国产| 欧美黄色片免费观看| 久久久久久久久久久久av| 亚洲2020天天堂在线观看| 91av在线国产| 青青草原一区二区| 亚州精品天堂中文字幕| 久久久久久免费精品| 久久久欧美精品| 欧美黑人一级爽快片淫片高清| 在线观看日韩专区|