奶头挺立呻吟高潮av全片,成人试看120秒体验区,性欧美极品v,A片高潮抽搐揉捏奶头视频

C語言

C語言中指針高級用法介紹

時(shí)間:2025-04-16 05:07:20 C語言 我要投稿
  • 相關(guān)推薦

C語言中指針高級用法介紹

  問題描述:指針是C語言很有特色的一個(gè)部分,但是使用也比較復(fù)雜,很容易導(dǎo)致一些莫名的錯(cuò)誤,比如有時(shí)候函數(shù)指針沒有賦值,有時(shí)指向了未定義的內(nèi)存,這些時(shí)候都可能導(dǎo)致程序異常執(zhí)行或者崩潰。但指針的靈活性讓它可以實(shí)現(xiàn)很多復(fù)雜的操作,如指向指針的指針,指向函數(shù)的指針。

  指向指針的指針:函數(shù)傳遞參數(shù)是傳值調(diào)用的,如果想在調(diào)用函數(shù)時(shí)改變傳入的參數(shù)的值,而且該傳入的參數(shù)的值本來是個(gè)指針時(shí),這時(shí)就可以使用指向指針的指針了,以這種方式一般不用給函數(shù)返回參數(shù),函數(shù)中只拷貝指向指針的指針值,而被指向的指針以及該指針指向的內(nèi)存單元都可以直接操作,

  void add_to_list(struct node **list, int n) {

  struct node *new_node;

  new_node = malloc(sizeof(struct node));

  if(new_node == NULL) {  // 確認(rèn)申請內(nèi)存成功

  printf("Error: malloc failed in add_to_list\n");

  exit(EXIT_FAILURE);

  }

  new_node->value = n;

  new_node->next = *list;

  *list = new_node;

  }

  add_to_list(&first, 10);

  該函數(shù)用于將結(jié)點(diǎn)添加到一個(gè)鏈表的表頭,first本身是一個(gè)指針,其指向鏈表的表頭結(jié)點(diǎn),&first將其指針的地址傳入函數(shù)賦值給指向指針的指針**list,此時(shí)list為指向first指針的指針,*list即為first,因此在函數(shù)內(nèi)部對*list進(jìn)行操作即相當(dāng)于對外部的first指針進(jìn)行操作一樣,圖示如下:

  [指針]C語言中指針的高級用法

  指向函數(shù)的指針:指針不只能指向數(shù)據(jù),也能指向函數(shù)。函數(shù)占用內(nèi)存單元,每個(gè)函數(shù)都有地址的,因此可以使用指向函數(shù)的指針。指向函數(shù)的指針在調(diào)用函數(shù)較多的地方會用到,另外也可以設(shè)計(jì)架構(gòu)利用函數(shù)指針模擬某一對象的行為。

  double integrate(double (*f)(double), double a, double b); // 聲明一,表明第一個(gè)參數(shù)接收函數(shù)指針

  double integrate(double f(double), double a, double b); // 聲明二,不建議使用,表意不明確

  result = integrate(sin, 0.0, PI/2); // 調(diào)用

  在integrate函數(shù)體內(nèi)(*f)(x)即表示sin(x)的調(diào)用。

  由于C語言將函數(shù)指針當(dāng)成數(shù)據(jù)指針對待,可以將函數(shù)指針存儲在變量之中,也可以當(dāng)作數(shù)組的元素,這樣,在索引數(shù)組元素時(shí)就可以得到事先存儲好的函數(shù)調(diào)用了。函數(shù)指針也可用作結(jié)構(gòu)或聯(lián)合的成員,可以作為函數(shù)的返回值等。

  傳遞給函數(shù)指針的值是某個(gè)函數(shù)的函數(shù)名,后面不用括號,這個(gè)與數(shù)組類似,數(shù)組名代表地址,函數(shù)名也是代表地址。

  void (*pf)(int);  // 函數(shù)指針變量聲明

  pf = f;  // 函數(shù)指針變量賦值

  (*pf)(i);  // f(i),函數(shù)指針指向的函數(shù)的調(diào)用,也可以直接用pf(i)

  函數(shù)指針數(shù)組:

  void (*file_cmd[])(void) = {new_cmd, open_cmd; close_cmd, close_all_cmd, save_cmd, save_as_cmd, save_all_cmd, print_cmd, exit_cmd};  // 函數(shù)指針數(shù)組初始化賦值,函數(shù)指針數(shù)組在函數(shù)指針變量后多了[]

  (*file_cmd[n])();  // 函數(shù)指針數(shù)組元素的調(diào)用,調(diào)用對應(yīng)的函數(shù),也可以用file_cmd[n]();

  受限指針(C99):

  int * restrict p;  // p為受限指針,restrict為關(guān)鍵字

  受限指針p指向的對象在之后需要修改,那么該對象不會允許通過除p之外的任何方式訪問。一個(gè)例子就是中的memcpy和memmove兩個(gè)函數(shù)的區(qū)別,其原型分別為:

  void *memcpy(void * restrict s1, const void * restrict s2, size_t n); // 表明s1和s2不應(yīng)當(dāng)重疊

  void *memmove(void * s1, const void * s2, size_t n);

  靈活數(shù)組成員(C99):這個(gè)功能用于字符串?dāng)?shù)組作為結(jié)構(gòu)的成員時(shí)動態(tài)分配內(nèi)存,

  struct vstring {

  ing len;

  char chars[];

  };  // 包含字符串?dāng)?shù)組的結(jié)構(gòu),該結(jié)構(gòu)最后一個(gè)成員為數(shù)組時(shí),長度可省略--就是靈活數(shù)組成員

  struct vstring *str = malloc(sizeof(struct vstring) + n);

  str->len = n;

【C語言中指針高級用法介紹】相關(guān)文章:

C語言指針的用法07-02

C語言中指針的用法介紹10-27

C語言指針用法詳解08-21

C語言學(xué)習(xí)中的指針用法教程08-25

C語言入門之指針用法06-24

C語言的指針10-11

C語言中各種類型指針的特性與用法介紹10-18

c語言指針中的二級指針示例詳解11-07

在Swift中怎么使用C語言的指針08-07

主站蜘蛛池模板: 余江县| 清水县| 图木舒克市| 吉水县| 凤山县| 呼和浩特市| 道孚县| 武强县| 广饶县| 罗山县| 息烽县| 永定县| 黄浦区| 阜康市| 东乡族自治县| 灌南县| 卫辉市| 隆安县| 从化市| 溆浦县| 安宁市| 黄大仙区| 崇信县| 保靖县| 武穴市| 滨州市| 苍山县| 南皮县| 麟游县| 灵川县| 神池县| 林周县| 衡山县| 乌兰察布市| 安平县| 大悟县| 河北省| 江北区| 常熟市| 尉犁县| 喀喇|