最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C/C++ 中 void*從概念到實戰(zhàn)深度解析

 更新時間:2025年11月01日 11:05:55   作者:A-code  
本文主要介紹了C/C++中的void*類型,從概念、特性、用途到實戰(zhàn)規(guī)范進(jìn)行了全面拆解,void*是一種通用指針,可以指向任意類型的數(shù)據(jù),但需要顯式轉(zhuǎn)換以使用,本文給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧

寫作契機

        前段時間求職面試,經(jīng)常會遇上一些面試題,其中最常見的就是void * 有何作用?
 我也沒有系統(tǒng)的總結(jié)過 void*的用法,趁著這次寫博客的機會,好好總結(jié)下!

一、前言

        不懂 void*,很難稱得上是合格的 C/C++ 開發(fā)者——這句話并非夸張。在 C/C++ 體系中,void* 是從新手邁向進(jìn)階的核心“橋梁”:新手常因它的“無類型”特性覺得抽象難懂,而資深開發(fā)者卻能借助它實現(xiàn)靈活的內(nèi)存管理、泛型編程和底層交互。若回避 void*,不僅難以開發(fā)通用庫、進(jìn)行系統(tǒng)級編程,甚至?xí)诿嬖囍械幕A(chǔ)原理題上折戟。本文將從概念、特性、用途到實戰(zhàn)規(guī)范,全面拆解 void*,讓其從“抽象符號”變?yōu)榭墒炀氝\用的工具。

二、void* 是什么

        在 C/C++ 中,void 關(guān)鍵字的核心含義是“無類型”,由此衍生出的 void* 可直譯為“指向無類型數(shù)據(jù)的指針”。其最特殊的屬性是:能存儲任意基礎(chǔ)數(shù)據(jù)類型或自定義類型的內(nèi)存地址,無論是 int、char、float 還是結(jié)構(gòu)體、類的地址,都能直接賦值給 void* 變量。

        但關(guān)鍵局限也隨之而來:void* 僅記錄內(nèi)存地址的起始位置,不包含任何關(guān)于目標(biāo)數(shù)據(jù)的類型信息和大小信息。這就像一張“空白停車證”——能登記任何車輛(數(shù)據(jù)類型)的車位號(內(nèi)存地址),但本身不標(biāo)注車輛類型(數(shù)據(jù)類型)和車身長度(數(shù)據(jù)大?。?。要使用車輛(操作數(shù)據(jù)),必須先在停車證上補充標(biāo)注車型(顯式類型轉(zhuǎn)換),這正是 void* 使用的核心原則。

三、void* 的特點

1. 通用指針屬性:兼容任意類型指針

void* 作為“通用指針”,可直接接收任意類型指針的賦值,無需顯式轉(zhuǎn)換。這種兼容性是其實現(xiàn)泛型能力的基礎(chǔ),示例如下:   

int a = 10; 
    float b = 3.14f;
    struct Student { 
        char name[20];
        int age; 
    } 
    stu = {"Zhang", 20}; // 以下賦值均合法,無需顯式轉(zhuǎn)換
    void* p1 = &a; // 指向int類型變量 
    void* p2 = &b; // 指向float類型變量 
    void* p3 = &stu; // 指向自定義結(jié)構(gòu)體變量

2. 類型安全性限制:必須“顯式還原”才能使用

(1)不能直接解引用

編譯器無法從 void* 中獲取數(shù)據(jù)類型和大小,因此直接解引用(*)會觸發(fā)編譯錯誤。必須先將其顯式轉(zhuǎn)換為具體類型指針,才能訪問目標(biāo)數(shù)據(jù)。這里需要特別注意 C 與 C++ 的語法差異:

C 語言允許 void* 隱式轉(zhuǎn)換為其他指針類型,但 C++ 強制要求顯式轉(zhuǎn)換。為保證代碼可移植性、可讀性和類型安全性,無論 C 還是 C++,都建議使用顯式轉(zhuǎn)換

分別通過 C 和 C++ 代碼驗證:

C 語言示例(兼容隱式轉(zhuǎn)換,但不推薦)
#include <stdio.h>
int main() {
int a = 10;
void* p = &a; // 合法:任意指針隱式轉(zhuǎn)為
void* int* m1 = p;// C允許隱式轉(zhuǎn)換(-Wall編譯會警告)
int* m2 = (int*)p; // 推薦:顯式轉(zhuǎn)換,可讀性更強
printf("*m1 = %d, *m2 = %d\n", *m1, *m2); // 輸出:10 10         
return 0;
}
C++ 示例(強制顯式轉(zhuǎn)換)
#include <iostream>
using namespace std;
int main()
{
int a = 10;
void* p = &a; // 合法:任意指針隱式轉(zhuǎn)為void*
// int* m1 = p;
// 錯誤:C++禁止void*隱式轉(zhuǎn)其他指針
int* m2 = (int*)p; // 合法:顯式轉(zhuǎn)換
cout << "*m2 = " << *m2 << endl; // 輸出:10
return 0;
}

(2)不能直接進(jìn)行指針運算

指針運算的核心是“步長”(每次移動的字節(jié)數(shù)),而 void* 無類型信息,編譯器無法確定步長,因此 ANSI C 標(biāo)準(zhǔn)明確禁止對 void* 直接進(jìn)行算術(shù)運算(如 p++p += 1)。

唯一例外是 GNU C 擴展(GCC 編譯器):默認(rèn)將 void* 視作 char*,步長為 1 字節(jié),但這種寫法會導(dǎo)致代碼失去可移植性。

#include <stdlib.h>
int main() {
void* p = malloc(100); // 分配100字節(jié)內(nèi)存
//p++;
// ANSI C:錯誤;GCC擴展:合法(步長1字節(jié))
// 正確做法:先轉(zhuǎn)換為具體類型再運算
((char*)p)++; // 顯式轉(zhuǎn)為char*,步長1字節(jié)
((int*)p) += 2; // 顯式轉(zhuǎn)為int*,步長為2*sizeof(int)
free(p);
return 0; }

最佳實踐:無論何種編譯器,都先將 void* 顯式轉(zhuǎn)換為具體類型指針,再執(zhí)行算術(shù)運算,確保代碼可移植。

四、void* 的核心用途

1. 實現(xiàn)泛型編程:突破類型限制

泛型編程的核心是“一套代碼適配多種類型”,void* 通過兼容任意類型指針的特性,成為 C 語言實現(xiàn)泛型的核心工具(C++ 雖有模板,但底層仍有 void* 應(yīng)用場景)。

(1)函數(shù)參數(shù)/返回值通用化

讓函數(shù)接收或返回任意類型數(shù)據(jù),典型場景是回調(diào)函數(shù)。例如實現(xiàn)一個“數(shù)據(jù)處理函數(shù)”,可適配 int、float 等多種類型:

#include <stdio.h>
// 通用處理函數(shù):接收void*參數(shù),通過類型標(biāo)識確定轉(zhuǎn)換目標(biāo)
void process_data(void* data, int type)
{
switch(type) {
  case 0: // 處理int類型
    printf("Int value: %d\n", *((int*)data));
  break;
  case 1: // 處理float類型
    printf("Float value: %.2f\n", *((float*)data));
  break;
  default:
    printf("Unsupported type\n");
}
}
int main()
{
  int a = 25;
  float b = 3.14f;
  process_data(&a, 0); // 傳入int類型數(shù)據(jù)
  process_data(&b, 1); // 傳入float類型數(shù)據(jù)
  return 0;
}

(2)通用數(shù)據(jù)結(jié)構(gòu)實現(xiàn)

用 void* 存儲節(jié)點數(shù)據(jù),使鏈表、隊列等數(shù)據(jù)結(jié)構(gòu)可存儲任意類型數(shù)據(jù)。以單鏈表為例:

#include <stdlib.h>
// 通用鏈表節(jié)點:data為void*類型,可存任意數(shù)據(jù)
typedef struct Node {
void* data;
struct Node* next;
} Node;
// 創(chuàng)建節(jié)點:接收任意類型數(shù)據(jù)地址
Node* create_node(void* data) {
  Node* node = (Node*)malloc(sizeof(Node));
  node->data = data; node->next = NULL;
  return node;
}
int main()
{
int num = 10;
char str[] = "test";
Node* node1 = create_node(&num); // 存儲int類型
Node* node2 = create_node(str); // 存儲char*類型 // 使用時需顯式轉(zhuǎn)換 printf("Node1 data: %d\n", *((int*)node1->data));
printf("Node2 data: %s\n", (char*)node2->data); // 此處省略內(nèi)存釋放代碼
return 0;
}

(3)標(biāo)準(zhǔn)庫中的泛型函數(shù)

C 標(biāo)準(zhǔn)庫中 malloc、memcpy、memset、qsort 等函數(shù),均通過 void* 實現(xiàn)通用能力:

  • malloc(size_t size):分配指定字節(jié)數(shù)的內(nèi)存,返回 void*,可轉(zhuǎn)換為任意類型指針;
  • memcpy(void* dest, const void* src, size_t n):復(fù)制 n 字節(jié)內(nèi)存,不依賴源/目標(biāo)數(shù)據(jù)類型;
  • qsort(void* base, size_t nmemb, size_t size, int (*compar)(const void*, const void*)):對任意類型數(shù)組排序。

2. 跨場景數(shù)據(jù)傳遞:靈活封裝異構(gòu)數(shù)據(jù)

在多線程、回調(diào)函數(shù)等異構(gòu)數(shù)據(jù)交互場景中,void* 可作為“數(shù)據(jù)容器”,封裝不同類型數(shù)據(jù)傳遞給目標(biāo)函數(shù)。例如多線程參數(shù)傳遞(以 POSIX 線程為例):

#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
// 自定義數(shù)據(jù)結(jié)構(gòu)
typedef struct {
int id;
char name[20];
} ThreadData;
// 線程函數(shù):接收void*參數(shù),顯式轉(zhuǎn)為自定義結(jié)構(gòu)
void* thread_func(void* arg) {
ThreadData* data = (ThreadData*)arg;
printf("Thread ID: %d, Name: %s\n", data->id, data->name);
free(data);
// 釋放傳入的堆內(nèi)存
pthread_exit(NULL);
}
int main() {
pthread_t tid;
// 動態(tài)分配參數(shù)內(nèi)存(避免棧內(nèi)存生命周期問題)
ThreadData* data = (ThreadData*)malloc(sizeof(ThreadData));
data->id = 1; snprintf(data->name, sizeof(data->name), "Worker");
// 傳入void*類型參數(shù)
pthread_create(&tid, NULL, thread_func, (void*)data);
pthread_join(tid, NULL);
return 0;
}

3. 底層交互:直接操作內(nèi)存地址

在嵌入式開發(fā)、驅(qū)動編程等底層場景中,常需直接操作硬件寄存器或內(nèi)存映射區(qū)域,void* 可表示“原始內(nèi)存地址”,適配任意地址的訪問需求:

#include <stdint.h>
// 假設(shè)0x10000000是某硬件寄存器的地址 #define REG_ADDR 0x10000000
int main()
{
// 將地址轉(zhuǎn)為void*,再顯式轉(zhuǎn)為uint32_t*操作32位寄存器
void* reg_ptr = (void*)REG_ADDR;
*((uint32_t*)reg_ptr) = 0x12345678; // 寫入數(shù)據(jù)
uint32_t value = *((uint32_t*)reg_ptr); // 讀取數(shù)據(jù)
return 0;
}

五、關(guān)鍵使用規(guī)范與陷阱規(guī)避

1. 賦值轉(zhuǎn)換:遵循“隱入顯出”原則

void* 與其他指針的轉(zhuǎn)換需遵循嚴(yán)格規(guī)則,核心可概括為“隱入顯出”:

  • 隱入:任意類型指針可隱式賦值給 void*,無需轉(zhuǎn)換關(guān)鍵字;
  • 顯出:void* 賦值給其他類型指針時,必須顯式轉(zhuǎn)換,明確指定目標(biāo)類型。
int x = 10;
int* int_ptr = &x;
void* void_ptr = NULL; // 正確:隱入(任意指針→void*)
void_ptr = int_ptr; // OK,無需顯式轉(zhuǎn)換
void_ptr = &x; // OK // 正確:顯出(void*→其他指針)
int_ptr = (int*)void_ptr; // 必須顯式轉(zhuǎn)換
// int_ptr = void_ptr;
// 錯誤:C++直接報錯,C編譯警告

2. 解引用前:必須完成類型“還原”

void* 不攜帶類型信息,任何解引用操作前都必須顯式轉(zhuǎn)換為目標(biāo)類型指針,否則會導(dǎo)致未定義行為(如數(shù)據(jù)解析錯誤、程序崩潰)。

int x = 65; // ASCII碼中65對應(yīng)字符'A'
void* p = &x; // 錯誤:未轉(zhuǎn)換直接解引用(編譯報錯)
//printf("%d\n", *p);
// 錯誤:類型不匹配的轉(zhuǎn)換(解析亂碼)
char* cp = (char*)p;
printf("錯誤示例:%c\n", *cp); // 輸出'A',而非預(yù)期的65
// 正確:顯式轉(zhuǎn)換為匹配類型
int* ip = (int*)p;
printf("正確示例:%d\n", *ip); // 輸出65

3. 比較運算:僅支持地址相等性判斷

void* 可與其他指針進(jìn)行相等性比較(判斷是否指向同一內(nèi)存地址),但不能直接進(jìn)行大小比較(如 p1 < p2),除非先轉(zhuǎn)換為同一具體類型:

int arr[5] = {1,2,3,4,5};
int* ptr1 = &arr[0];
int* ptr2 = &arr[3];
void* void_ptr = ptr1; // 正確:相等性比較
if (void_ptr == ptr1)
printf("指向同一地址\n");
if (void_ptr != ptr2)
printf("指向不同地址\n");
// 錯誤:直接大小比較(ANSI C不支持)
// if (void_ptr < ptr2) printf("地址更小\n");
// 正確:轉(zhuǎn)換后大小比較
if ((int*)void_ptr < ptr2) printf("地址更小\n");

4. 指針運算:先轉(zhuǎn)換再運算

如前文所述,ANSI C 禁止 void* 直接算術(shù)運算,必須先顯式轉(zhuǎn)換為具體類型指針,通過類型確定步長后再運算:

void* buf = malloc(10 * sizeof(int)); // 分配10個int的內(nèi)存
// 錯誤:直接運算(編譯報錯)
// buf += 2;
// 正確:轉(zhuǎn)換為int*后運算(步長為sizeof(int))
int* int_buf = (int*)buf;
int_buf += 2; // 等價于移動2*sizeof(int)字節(jié)
// 正確:轉(zhuǎn)換為char*后運算(步長為1字節(jié))
char* char_buf = (char*)buf;
char_buf += 2; // 移動2字節(jié)

5. 內(nèi)存管理:誰分配誰釋放,避免懸空指針

void* 僅存儲地址,不管理內(nèi)存生命周期:

  • 若 void* 指向堆內(nèi)存(如 malloc 分配),必須由調(diào)用者顯式釋放,且釋放前無需轉(zhuǎn)換類型(free 接收 void* 參數(shù));
  • 避免使用已釋放的 void* 指針(懸空指針),釋放后建議置為 NULL。
void* p = malloc(100);
if (p == NULL)
return -1; // 務(wù)必檢查內(nèi)存分配結(jié)果
// 使用時轉(zhuǎn)換
int* ip = (int*)p;
ip[0] = 10; // 釋放時無需轉(zhuǎn)換
free(p);
p = NULL; // 避免懸空指針 
free(p); // 安全:釋放NULL無副作用

六、典型應(yīng)用場景匯總

為便于快速查閱,下表匯總 void* 的核心應(yīng)用場景、代碼示例及作用說明:

應(yīng)用場景

核心代碼片段

作用說明

通用內(nèi)存操作

void* memcpy(void* dest, const void* src, size_t n);

復(fù)制 n 字節(jié)內(nèi)存,不依賴源/目標(biāo)數(shù)據(jù)類型,實現(xiàn)跨類型拷貝

通用鏈表節(jié)點

struct Node { void* data; struct Node* next; };

節(jié)點數(shù)據(jù)域兼容任意類型,使鏈表可存儲int、結(jié)構(gòu)體等多種數(shù)據(jù)

回調(diào)函數(shù)參數(shù)

void callback(void* user_data) { int* data = (int*)user_data; }

讓回調(diào)函數(shù)接收自定義數(shù)據(jù),適配不同業(yè)務(wù)場景的參數(shù)需求

多線程參數(shù)傳遞

pthread_create(&tid, NULL, func, (void*)arg);

封裝線程所需的任意類型參數(shù),解決多線程場景的異構(gòu)數(shù)據(jù)傳遞問題

泛型排序(qsort)

qsort(arr, 5, sizeof(int), cmp); int cmp(const void* a, const void* b) { return *(int*)a - *(int*)b; }

通過void*接收任意類型數(shù)組,配合比較函數(shù)實現(xiàn)通用排序

七、注意事項:避坑關(guān)鍵要點

1. 嚴(yán)防類型轉(zhuǎn)換錯誤:確保“轉(zhuǎn)換前后類型匹配”

錯誤的類型轉(zhuǎn)換是 void* 最常見的陷阱,如將指向 int 的 void* 轉(zhuǎn)為 float*,會導(dǎo)致數(shù)據(jù)按錯誤的二進(jìn)制規(guī)則解析,引發(fā)未定義行為。核心原則:轉(zhuǎn)換后的類型必須與指針實際指向的數(shù)據(jù)類型完全一致。

2. 管控內(nèi)存生命周期:避免泄漏與懸空

void* 不關(guān)聯(lián)類型信息,容易遺忘其指向的內(nèi)存類型(堆/棧),需特別注意:

  • 指向棧內(nèi)存的 void*:避免在棧幀銷毀后使用(如函數(shù)返回局部變量地址);
  • 指向堆內(nèi)存的 void*:必須由調(diào)用者負(fù)責(zé)釋放,且釋放后立即置為 NULL,避免懸空指針。

3. 兼容編譯器差異:以 ANSI C 標(biāo)準(zhǔn)為基準(zhǔn)

不同編譯器對 void* 的支持存在差異(如 GNU C 擴展允許 void* 算術(shù)運算),開發(fā)時需以 ANSI C 標(biāo)準(zhǔn)為準(zhǔn),不依賴編譯器擴展特性,確保代碼可移植。

4. 優(yōu)先使用類型安全替代方案(C++場景)

C++ 中雖支持 void*,但有更安全的泛型方案(如模板、std::any),在非底層交互場景下,優(yōu)先使用模板等類型安全機制,減少 void* 帶來的風(fēng)險。

八、總結(jié)

void* 作為 C/C++ 中的“通用指針”,其核心價值在于“剝離類型束縛,實現(xiàn)靈活適配”,但同時也因“無類型”特性帶來了類型安全風(fēng)險。掌握它的關(guān)鍵在于抓住“顯式轉(zhuǎn)換”這一核心原則——使用前必須將其還原為具體類型,才能進(jìn)行解引用、算術(shù)運算等操作。

下表梳理其核心特性與使用要點:

核心維度

關(guān)鍵說明

本質(zhì)

純內(nèi)存地址載體,不攜帶類型和大小信息

核心能力

存儲任意類型指針,是實現(xiàn)泛型和底層交互的基礎(chǔ)

使用前提

解引用/算術(shù)運算前,必須顯式轉(zhuǎn)換為具體類型指針

核心用途

內(nèi)存管理、泛型編程、跨場景數(shù)據(jù)傳遞、底層硬件交互

最大風(fēng)險

類型轉(zhuǎn)換錯誤導(dǎo)致未定義行為,內(nèi)存生命周期管理不當(dāng)

九、寫在最后

void* 是 C/C++ 進(jìn)階路上的“試金石”,理解它不僅能掌握泛型編程和底層開發(fā)的核心技巧,更能深化對內(nèi)存模型的認(rèn)知。本文雖力求全面,但 C/C++ 語法靈活,實際開發(fā)中仍需結(jié)合場景靈活運用。若文中存在紕漏或邏輯疏漏,懇請讀者不吝指正;若能為您的學(xué)習(xí)帶來些許幫助,便是筆者最大的榮幸。

到此這篇關(guān)于C/C++ 中 void* 深度解析:從概念到實戰(zhàn)的文章就介紹到這了,更多相關(guān)C++ void* 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++?qsort函數(shù)排序與冒泡模擬實現(xiàn)流程詳解

    C++?qsort函數(shù)排序與冒泡模擬實現(xiàn)流程詳解

    qsort是一個庫函數(shù),基于快速排序算法實現(xiàn)的一個排序的函數(shù),下面這篇文章主要給大家介紹了關(guān)于C語言qsort()函數(shù)使用的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • C++中日期類的常見題目合集分享

    C++中日期類的常見題目合集分享

    這篇文章主要為大家詳細(xì)介紹了一些C++中日期類的常見題目,文中的示例代碼講解詳細(xì),對我們掌握C++有一定的幫助,感興趣的小伙伴可以了解一下
    2023-06-06
  • 詳解C語言解決經(jīng)典問題之兔子產(chǎn)子

    詳解C語言解決經(jīng)典問題之兔子產(chǎn)子

    有一對兔子,從出生后的第 3 個月起每個月都生一對兔子。小兔子長到第 3 個月后每個月又生一對兔子,假設(shè)所有的兔子都不死,問 30 個月內(nèi)每個月的兔子總數(shù)為多少?本文將用C語言解決這一經(jīng)典問題,需要的可以參考一下
    2022-03-03
  • VS報錯C6011的問題:取消對NULL指針的引用(解決方法)

    VS報錯C6011的問題:取消對NULL指針的引用(解決方法)

    這篇文章主要介紹了VS報錯C6011的問題:取消對NULL指針的引用(解決方法),C6011:取消對NULL指針的引用,發(fā)現(xiàn)是沒有進(jìn)行空指針的判斷,解決方案跟隨小編一起看看吧
    2024-01-01
  • VC++實現(xiàn)CStdioFile寫入及讀取文件并自動換行的方法

    VC++實現(xiàn)CStdioFile寫入及讀取文件并自動換行的方法

    這篇文章主要介紹了VC++實現(xiàn)CStdioFile寫入及讀取文件并自動換行的方法,很實用的功能,需要的朋友可以參考下
    2014-08-08
  • C++可調(diào)用對象callable object深入分析

    C++可調(diào)用對象callable object深入分析

    所謂的callable object,表示可以被某種方式調(diào)用其某些函數(shù)的對象。它可以是:一個函數(shù)、一個指向成員函數(shù)的指針、一個函數(shù)對象,該對象擁有operator()、一個lambda表達(dá)式,嚴(yán)格的說它是一種函數(shù)對象
    2022-08-08
  • C++中范圍(Ranges)與視圖(Views)的常見問題、易錯點

    C++中范圍(Ranges)與視圖(Views)的常見問題、易錯點

    ranges和views是C20引入的重要特性,它們讓代碼更加簡潔、高效且富有表達(dá)力,通過理解其基本概念、注意常見的陷阱,并合理應(yīng)用高級技巧,開發(fā)者可以充分利用這些新特性,提升軟件質(zhì)量和開發(fā)效率,,本文將深入淺出地探討ranges與views的基礎(chǔ)概念、常見問題、易錯點及避免策略
    2024-06-06
  • Cocos2d-x UI開發(fā)之CCControlButton控件類實例

    Cocos2d-x UI開發(fā)之CCControlButton控件類實例

    這篇文章主要介紹了Cocos2d-x UI開發(fā)之CCControlButton控件類實例,本文代碼中包含大量注釋來講解CCControlButton控件類的使用,需要的朋友可以參考下
    2014-09-09
  • C語言數(shù)組越界引發(fā)的死循環(huán)問題解決

    C語言數(shù)組越界引發(fā)的死循環(huán)問題解決

    本文主要介紹了C語言數(shù)組越界引發(fā)的死循環(huán)問題解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • C++運算符重載規(guī)則詳解

    C++運算符重載規(guī)則詳解

    這篇文章主要介紹了C++運算符重載規(guī)則詳解,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09

最新評論

衡水市| 芦山县| 黄平县| 弥渡县| 崇阳县| 民勤县| 汝南县| 教育| 哈巴河县| 焦作市| 永福县| 嘉黎县| 巴彦淖尔市| 南阳市| 十堰市| 抚远县| 郴州市| 平江县| 肥西县| 望都县| 高台县| 青神县| 濉溪县| 辽宁省| 出国| 崇州市| 邓州市| 昌乐县| 高密市| 满洲里市| 盐城市| 丁青县| 松溪县| 句容市| 胶南市| 永仁县| 勃利县| 保山市| 平原县| 同仁县| 郓城县|