欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解C語言的void*空指針

 更新時間:2022年03月29日 10:51:55   作者:熠熠L  
這篇文章主要為大家詳細介紹了C語言的void*空指針,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

在C語言中,void稱為無類型,相應的void*稱為無類型指針或者空指針類型。

void的應用

對函數(shù)返回值的限定。

例如void func(int);該函數(shù)沒有返回值。對函數(shù)參數(shù)類型的限定。

例如int func(void);該函數(shù)沒有參數(shù),不允許接收參數(shù)。

空指針類型(void*)

空指針類型的變量void* pvoid;可以指向任意類型的數(shù)據(jù),任何類型的指針也可以直接賦值給空指針類型的變量。

#include <stdio.h>


int main()
{
    char c, *pc;
    int i, *pi;
    double d, *pd;
    void *pvoid;

    pc = &c;
    pvoid = pc;
    printf("pvoid = %p  &c = %p\n", pvoid, &c);
    pi = &i;
    pvoid = pi;
    printf("pvoid = %p  &i = %p\n", pvoid, &i);
    pd = &d;
    pvoid = pd;
    printf("pvoid = %p  &d = %p\n", pvoid, &d);

}


/*
輸出結果
pvoid = 000000000061FDFF  &c = 000000000061FDFF
pvoid = 000000000061FDF8  &i = 000000000061FDF8
pvoid = 000000000061FDF0  &d = 000000000061FDF0
*/

但是如果空指針類型的變量賦值給任意指針類型的變量,就需要強制轉換;也就是顯式說明該指針指向的內存中是存放的什么類型的數(shù)據(jù)。

void *pvoid;
int *pi;
char *pc;
double *pd;

pi = (int*)pvoid;
pc = (char*)pvoid;
pd = (double*)pd;

另外,以下有些需要注意的地方。

在 ANSI C 標準中,不允許對 void 指針進行一些算術運算如 p++ 或 p+=1 等。因為既然 void 是無類型,那么每次算術運算我們就不知道該操作幾個字節(jié),例如 char 型操作 sizeof(char) 字節(jié),而 int 則要操作 sizeof(int) 字節(jié)。而在 GNU 中則允許,因為在默認情況下,GNU 認為 void * 和 char * 一樣,既然是確定的,當然可以進行一些算術操作,在這里sizeof(*p)==sizeof(char)

int i;
void *pvoid;
pvoid = &i;
printf("%p\n", pvoid);
pvoid++;//ANSI:錯誤;GNU:正確
pvoid += 1;//ANSI:錯誤;GNU:正確
printf("%p\n", pvoid);

在實際的程序設計中,為迎合 ANSI 標準,并提高程序的可移植性,我們可以這樣編寫實現(xiàn)同樣功能的代碼:

((int*)pvoid)++;
(int*)pvoid += 1;

總結

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!

 

您可能感興趣的文章:

相關文章

  • 關于C++中構造函數(shù)初始化成員列表的總結

    關于C++中構造函數(shù)初始化成員列表的總結

    下面小編就為大家?guī)硪黄P于C++中構造函數(shù)初始化成員列表的總結。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語言指針基礎詳解

    C語言指針基礎詳解

    這篇文章主要介紹了C語言指針的基礎,主要對C語言中指針的本質及常見用法做了較為通俗易懂的分析,是后續(xù)深入學習C語言的基礎,需要的朋友可以參考下
    2021-10-10
  • C/C++中CONST用法總結(推薦)

    C/C++中CONST用法總結(推薦)

    這篇文章主要介紹了C/C++中CONST用法總結(推薦),包括const常量與define宏定義的區(qū)別介紹,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2017-07-07
  • C\C++實現(xiàn)讀寫二進制文件的方法詳解

    C\C++實現(xiàn)讀寫二進制文件的方法詳解

    這篇文章主要為大家詳細介紹了C\C++實現(xiàn)讀寫二進制文件的方法,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下
    2023-03-03
  • 解析linux 文件和目錄操作的相關函數(shù)

    解析linux 文件和目錄操作的相關函數(shù)

    以下是對linux中文件和目錄操作的相關函數(shù)進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • C++數(shù)據(jù)結構之文件壓縮(哈夫曼樹)實例詳解

    C++數(shù)據(jù)結構之文件壓縮(哈夫曼樹)實例詳解

    這篇文章主要介紹了C++數(shù)據(jù)結構之文件壓縮(哈夫曼樹)實例詳解的相關資料,利用哈夫曼編碼的方式對文件進行壓縮,并且對壓縮文件可以解壓,需要的朋友可以參考下
    2017-07-07
  • C語言中那些你必須知道的常用關鍵字

    C語言中那些你必須知道的常用關鍵字

    這篇文章主要介紹了C語言中我們常用的關鍵字靜態(tài)static的詳細講解和typedef?、#define定義常量和宏,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-06-06
  • C++?auto關鍵字的小知識點分享

    C++?auto關鍵字的小知識點分享

    這篇文章主要是來和大家介紹一些C++中的小知識點,本文將從auto關鍵字開始講起,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • 舉例理解C語言二維數(shù)組的指針指向問題

    舉例理解C語言二維數(shù)組的指針指向問題

    這篇文章主要介紹了C語言二維數(shù)組的指針指向問題,文中不建議用二級指針來訪問二維數(shù)組,需要的朋友可以參考下
    2015-12-12
  • C++ lambda閉包消除類成員變量的解決思路

    C++ lambda閉包消除類成員變量的解決思路

    在面向對象編程中,類成員變量過多可能會造成干擾,可以采用函數(shù)式編程的思想,通過閉包和lambda表達式減少不必要的類成員,增強代碼的可控性和減少干擾,注意要正確使用mutable修飾符和值捕獲,以及合理安排lambda的初始化時機,感興趣的朋友跟隨小編一起看看吧
    2024-09-09

最新評論