0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

什么是C語言(void*)類型

汽車電子技術(shù) ? 來源:微亮筆記 ? 作者:PASSION ? 2023-02-24 14:31 ? 次閱讀

大家在C語言的學(xué)習(xí)過程中肯定見過各種指針符號,如 int*, char* 等等等等。顧名思義,int就是一個指向整形的指針,而char則是一個指向字符的指針,而 “ void* ”是什么呢?本期就為大家介紹 空指針

void指針一般被稱為通用指針或叫泛指針。它是C語言關(guān)于純粹地址的一種約定。當某個指針是void型指針時,所指向的對象不屬于任何類型。

1、void *表示一個“不知道類型”的指針,也就不知道從這個指針地址開始多少字節(jié)為一個數(shù)據(jù)。和用int表示指針異曲同工,只是更明確是“指針”。

因此void*只能表示一個地址,不能用來&取值,也不能移動指針,因為不知道多少字節(jié)是一個數(shù)據(jù)單位。

2、void *就是一個不能動的“地址”,在進行&、移動指針之前必須轉(zhuǎn)型為類型指針。

3、指針在只知道內(nèi)存,但是不知道是什么類型的時候。

4、在C/C++中,在任意時刻都可以使用其它類型指針來代替void指針,或者用void指針來代替其他類型指針。

5、對指針變量的解引用,使用間接運算符*達到目的。但是在使用空指針的情況下,需要轉(zhuǎn)換指針變量解引用。這是因為空指針沒有與之關(guān)聯(lián)的數(shù)據(jù)類型。編譯器無法知道void指針指向的數(shù)據(jù)類型。因此,要獲取由void指針指向的數(shù)據(jù),需要使用在void指針位置內(nèi)保存的正確類型的數(shù)據(jù)進行類型轉(zhuǎn)換。

也就是說,void*類型的指針可以接受任意類型的指針

但是不能夠進行解引用操作,也不能進行加減運算

需要注意的是,void* 即使在接收某一具體類型的指針后,它的類型依然是void*,我們?nèi)匀粺o法對其進行解引用操作,需要進行強制類型轉(zhuǎn)換才可以。

由于空指針的特殊性,我們一般將其運用在函數(shù)參數(shù)里,用以接收各種類型的參數(shù)。

例:

void* e1;
*(int*)e1;

下面附帶一個有空指針參與的qsort(快速排序)函數(shù)

注1:由于qsort是庫函數(shù),因此我在編寫時將函數(shù)名改為了 ‘my_qsort’

注2:此函數(shù)只是向大家展示空指針的應(yīng)用,其中仍有指針方面的知識,我們會在后續(xù)章節(jié)具體介紹

qsort 函數(shù)
void swap(char*buf1,char*buf2,int width)
//交換函數(shù)
{
  for (int i = 0;i < width;i++)
  {
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;    
buf1++;    
buf2++;
  }
 }
void my_qsort(void* base,int sz,int width, int (*cmp)(void* e1,void* e2))
{
  for (int i = 0;i < sz;i++)
  {    for (int j = 0;j < sz - 1 - i;j++)
{      //兩個元素的比較
      if (cmp((char*)base + j * width, (char*)base + (j + 1) * width)>0) 
     {        //交換
        swap((char*)base + j * width, (char*)base + (j + 1) * width,width);
      }
    }
  }
}int cmp_int(const void* e1, const void* e2)
{
  return *(int*)e1 - *(int*)e2;
}
int main()
{
  int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  my_qsort(arr, sz, sizeof(arr[0]), cmp_int);}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C語言
    +關(guān)注

    關(guān)注

    180

    文章

    7604

    瀏覽量

    136841
  • Int
    Int
    +關(guān)注

    關(guān)注

    0

    文章

    23

    瀏覽量

    16069
  • 符號
    +關(guān)注

    關(guān)注

    0

    文章

    55

    瀏覽量

    4336
收藏 人收藏

    評論

    相關(guān)推薦

    C語言void指針的基本認識及典型應(yīng)用

    C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因為它們都是同一種
    發(fā)表于 02-01 09:26 ?1101次閱讀

    C語言中的基本數(shù)據(jù)類型

    C語言是非常重要的一門程序設(shè)計語言,學(xué)好C語言再去學(xué)習(xí)其他編程語言將變得很輕松,因為大部分
    發(fā)表于 04-26 17:33 ?2013次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>中的基本數(shù)據(jù)<b class='flag-5'>類型</b>

    C預(yù)處理與C語言基本數(shù)據(jù)類型

    指令表:注意:宏名的書寫由標識符與兩邊各兩條下劃線構(gòu)成。C語言基本數(shù)據(jù)類型不同操作系統(tǒng)中數(shù)據(jù)類型所占字節(jié)數(shù)圖解數(shù)據(jù)類型的其他分類:變量常量(
    發(fā)表于 12-21 08:29

    C程序的運行環(huán)境和C語言的數(shù)據(jù)類型

    ⒈ 實驗?zāi)康蘑?了解在具體的語言環(huán)境下如何編輯、編譯、連接和運行一個C程序。⑵ 通過運行簡單的C程序,初步了解C源程序的特點。⑶ 掌握C
    發(fā)表于 06-21 09:36 ?55次下載

    C語言voidvoid指針深層探索

    1.概述 本文將對void關(guān)鍵字的深刻含義進行解說,并詳述voidvoid指針類型的使用方法與技巧。 2.void的含義
    發(fā)表于 09-21 11:36 ?166次下載

    C語言教程之檢查字符類型

    C語言教程之檢查字符類型,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 09:38 ?0次下載

    C語言教程之顯卡類型測試

    C語言教程之顯卡類型測試,很好的C語言資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-25 17:07 ?0次下載

    淺談void 型指針的高階用法

    通用指針或叫泛指針。它是C語言關(guān)于純粹地址的一種約定。當某個指針是void型指針時,所指向的對象不屬于任何類型。 因為void指針不屬于任何
    的頭像 發(fā)表于 08-09 15:54 ?1646次閱讀
    淺談<b class='flag-5'>void</b> 型指針的高階用法

    STM32編程:void指針高階用法舉例,設(shè)計一個通用掉電存儲子系統(tǒng)

    一般被稱為通用指針或叫泛指針。它是C語言關(guān)于純粹地址的一種約定。當某個指針是void型指針時,所指向的對象不屬于任何類型。 因為void指針
    發(fā)表于 12-27 18:47 ?10次下載
    STM32編程:<b class='flag-5'>void</b>指針高階用法舉例,設(shè)計一個通用掉電存儲子系統(tǒng)

    C語言-void類型作為萬能指針類型

    void類型在基本數(shù)據(jù)類型里是`空類型`,`無類型`; void
    的頭像 發(fā)表于 08-14 10:04 ?1807次閱讀

    一文揭秘C語言void指針

    void *表示一個“不知道類型”的指針,也就不知道從這個指針地址開始多少字節(jié)為一個數(shù)據(jù)。和用int表示指針異曲同工,只是更明確是“指針”。
    的頭像 發(fā)表于 02-02 17:18 ?1584次閱讀

    什么是void指針

    C語言中,*類型就是指針類型,比如 int *p,double *q,雖然是不一樣的指針,但是大小卻一樣sizeof(p) == sizeof(q),因為它們都是同一種
    的頭像 發(fā)表于 02-13 15:02 ?1385次閱讀

    C語言的數(shù)據(jù)類型-2

    對于一個計算機程序,它所做的所有運算的本質(zhì)都是數(shù)據(jù)的處理。但是數(shù)據(jù)的樣式并不單一,因此就有了各種各樣的數(shù)據(jù)類型。在C語言中,為了處理這些復(fù)雜的數(shù)據(jù),C
    的頭像 發(fā)表于 02-21 14:44 ?793次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>的數(shù)據(jù)<b class='flag-5'>類型</b>-2

    如何理解C++中的void

    首先void*中的void代表一個任意的數(shù)據(jù)類型,"星號"代表一個指針,所以其就是一個任意數(shù)據(jù)類型的指針。
    的頭像 發(fā)表于 03-30 15:01 ?4204次閱讀
    如何理解<b class='flag-5'>C</b>++中的<b class='flag-5'>void</b>?

    C語言數(shù)據(jù)類型有哪些

    C 語言中,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個廣泛的系統(tǒng)。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
    發(fā)表于 03-20 10:56 ?484次閱讀
    <b class='flag-5'>C</b><b class='flag-5'>語言</b>數(shù)據(jù)<b class='flag-5'>類型</b>有哪些