C++新手向指針教學

基本說明

C++的指針大概有幾個實操重點,不講理論,只告訴你你怎麼讀跟用。

1.指針變量

2.用*和&玩弄指針變量。

 (C++n級指針變量宣告方式) 

語法:

類型************************************************************************************* 變量名稱;

上行是合法的86級指針變量宣告方式。

範例

int x;									
int* px;								
int** ppx;							
int*** pppx;	

        註解: 幾個*就是幾級指針變量。

 (C++n級指針變量儲存內容) 

語法:

類型*************************************************************************************變量名稱1;

類型************************************************************************************* 變量名稱2 = &變量名稱1;

上行是合法的86級指針儲存85級指針的地址。

變量x可以儲存數據1。

一級指針變量px可以儲存變量x的地址

二級指針變量ppx可以儲存一級指針變量px的地址

三級指針變量pppx可以儲存二級指針變量ppx的地址

int x = 1;									
int* px = &x;								
int** ppx = &px;							
int*** pppx = &ppx;	

        註解: n級指針變量可以儲存n-1級指針變量

                類型必須一脈相承,只有int*能存int地址

ERROR

類型 "char *" 的值無法用來初始化類型 "int *" 的實體
char c;
int* pc = &c;

(&取地址運算符)

語法:

    類型 x;
    類型* px = &*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&*&x;

上行是合法的取出x的地址後,

進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址然後進行解地址然後再取出x的地址的一個過程。

當然你可以簡化成    

類型 x;

類型* px =&x;

變量x使用,可以取出變量地址,能夠被一級指針變量儲存。

一級指針變量px使用,可以取出一級指針變量px的地址,能夠被二級指針變量儲存。

二級指針變量ppx使用,可以取出二級指針變量ppx的地址,能夠被三級指針變量儲存。

三級指針變量pppx使用,可以取出三級指針變量pppx的地址,能夠被四級指針變量儲存。

int x = 1;									
int* px = &x;								
int** ppx = &px;							
int*** pppx = &ppx;	

        註解: &可以把任何變量的地址取出來,&不能多次使用。

                注意"變量&" 是對變量的引用,不是取址。

(*解地址運算符)

語法:

    類型************************************************************************************ 變量1;
    類型************************************************************************************* 變量2 = &變量1;
    LOG( 變量2);
    LOG(* 變量2);
    //LOG(** 變量2); ERROR發生存取違規

上三行是輸出85級指針變量1的地址85級指針變量1的值(由於沒有賦值,應該是個亂碼,有賦值的話會是個84級指針變量的地址)。

範例輸出:

 * __ptr64就是* ,只是提示這是64位的。

LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] px1 = [000000ADCFCFFB18] At funcPart4      ,line 00165
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] *px1 = [CCCCCCCCCCCCCCCC] At funcPart4      ,line 00166

對變量無法使用,因為變量不是地址。

一級指針變量使用一次,可以取出變量

二級指針變量使用一次,可以取出一級指針變量地址

三級指針變量使用一次,可以取出二級指針變量地址

int x = 1;									
int* px = &x;								
int** ppx = &px;							
int*** pppx = &ppx;	

x;
*px;
*ppx;
*pppx;

        註解: 看到*a時,a必然是至少一級指針變量,不會是變量

                *可以多次使用。


(例子)

來觀察以下極端的例子。LOG是輸出函數。

int x = 1;								//變量	
int* px = &x;							//儲存變量地址的一級指針變量	
int** ppx = &px;						//儲存一級指針變量地址的二級指針變量		
int*** pppx = &ppx;						//儲存二級指針變量地址的三級指針變量
int**** ppppx = &pppx;					//儲存三級指針變量地址的四級指針變量	
int***** pppppx = &ppppx;				//儲存四級指針變量地址的五級指針變量	
int****** ppppppx = &pppppx;			//儲存五級指針變量地址的六級指針變量		
int******* pppppppx = &ppppppx;			//儲存六級指針變量地址的七級指針變量

		LOG(x);                         //輸出變量  
		LOG(&x);                        //輸出變量的地址

		LOG(*px);                       //輸出一級指針變量解地址一次 
		LOG(px);                        //輸出一級指針變量
		LOG(&px);                       //輸出一級指針變量的地址

		LOG(**ppx);                     //輸出二級指針變量解地址二次 
		LOG(*ppx);                      //輸出二級指針變量解地址一次 
		LOG(ppx);                       //輸出二級指針變量
		LOG(&ppx);                      //輸出二級指針變量的地址

		LOG(***pppx);                   //輸出三級指針變量解地址三次 
		LOG(**pppx);                    //輸出三級指針變量解地址二次 
		LOG(*pppx);                     //輸出三級指針變量解地址一次 
		LOG(pppx);                      //輸出三級指針變量  
		LOG(&pppx);                     //輸出三級指針變量的地址

		LOG(****ppppx);                //我手累了
		LOG(***ppppx);
		LOG(**ppppx);
		LOG(*ppppx);
		LOG(ppppx);
		LOG(&ppppx);

		LOG(*****pppppx);
		LOG(****pppppx);
		LOG(***pppppx);
		LOG(**pppppx);
		LOG(*pppppx);
		LOG(pppppx);
		LOG(&pppppx);

		LOG(******ppppppx);
		LOG(*****ppppppx);
		LOG(****ppppppx);
		LOG(***ppppppx);
		LOG(**ppppppx);
		LOG(*ppppppx);
		LOG(ppppppx);
		LOG(&ppppppx);


		LOG(*******pppppppx);
		LOG(******pppppppx);
		LOG(*****pppppppx);
		LOG(****pppppppx);
		LOG(***pppppppx);
		LOG(**pppppppx);
		LOG(*pppppppx);
		LOG(pppppppx);
		LOG(&pppppppx);	

範例輸入1:

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <iomanip>
#include <typeinfo>
#include <sstream>
#include <chrono>
//#include <thread>
//#include <ctime>



//More information when outputting in Debug mode
//<iomanip> setw setfill dec 
//<typeinfo> typeid 
//<sstream> stringstream
//<thread> this_thread 
//<chrono> chrono 
//<ctime> 
#ifdef _DEBUG
#define TYPE(type, var) Type(#var, var, __LINE__, __FUNCTION__, #type)
template <typename T>
void Type(const char* varName, T  var, int line, const char* functionName, const char* type) {
	std::stringstream ss;
	ss << type << " <==> [" << typeid(var).name() << "] ";
	std::ios_base::fmtflags originalFlags = std::cout.flags();/*FORMAT FLAG*/\
		/*auto now = std::chrono::system_clock::now();*//*TIME*/\
		/*std::time_t timestamp = std::chrono::system_clock::to_time_t(now);*//*TIME*/\
		/* std::cout << "\nTime taken at Total : " << duration.count() / 1000.0 << " millisecond" << std::endl;*//*TIME*/
		std::cout.width(0);
	std::cout << std::setfill(' ') << std::left << "TYPE "\
		<< std::setw(50) << ss.str()/*TYPE*/\
		<< " At " << std::setw(15) << functionName /*FUNCTION*/\
		<< std::dec << ",line " << std::setw(5) << std::setfill('0') << std::right << line /*LINE*/\
		/*<< "File: " << __FILE__ */   /*FILE*/\
		/*<< ", Thread ID: " << std::this_thread::get_id() << ", "*//*THREAD*/\
		<< std::endl; \
		std::cout.flags(originalFlags);
}
#define LOG(var) Log(#var, var, __LINE__, __FUNCTION__)
template <typename T>
void Log(const char* varName, T  var, int line, const char* functionName) {
	std::stringstream ss;
	ss << "[" << typeid(var).name() << "] " << varName << " = [" << var << "]";
	std::ios_base::fmtflags originalFlags = std::cout.flags();/*FORMAT FLAG*/\

		/*auto now = std::chrono::system_clock::now();*//*TIME*/\
		/*std::time_t timestamp = std::chrono::system_clock::to_time_t(now);*//*TIME*/\
		/* std::cout << "\nTime taken at Total : " << duration.count() / 1000.0 << " millisecond" << std::endl;*//*TIME*/
		std::cout.width(0);
	std::cout << std::setfill(' ') << std::left << "LOG  "\
		<< std::setw(50) << ss.str()/*TYPE*//*VARIABLE*//*VALUE*/\
		<< " At " << std::setw(15) << functionName /*FUNCTION*/\
		<< std::dec << ",line " << std::setw(5) << std::setfill('0') << std::right << line /*LINE*/\
		/*<< "File: " << __FILE__ */   /*FILE*/\
		/*<< ", Thread ID: " << std::this_thread::get_id() << ", "*//*THREAD*/\
		<< std::endl; \
		std::cout.flags(originalFlags);
}

#else
void Type(const char* varName, T  var, int line, const char* functionName) {
	// 在非 DEBUG 模式下的實現
}
void Log(const char* varName, T  var, int line, const char* functionName) {
	// 在非 DEBUG 模式下的實現
#endif

//
	void funcPart0()
	{
		int x = 1;
		int* px = &x;
		int** ppx = &px;
		int*** pppx = &ppx;
		int**** ppppx = &pppx;
		int***** pppppx = &ppppx;
		int****** ppppppx = &pppppx;
		int******* pppppppx = &ppppppx;

		LOG(x);
		LOG(&x);

		std::cout << "\n";

		LOG(*px);
		LOG(px);
		LOG(&px);

		std::cout << "\n";

		LOG(**ppx);
		LOG(*ppx);
		LOG(ppx);
		LOG(&ppx);

		std::cout << "\n";

		LOG(***pppx);
		LOG(**pppx);
		LOG(*pppx);
		LOG(pppx);
		LOG(&pppx);

		std::cout << "\n";

		LOG(****ppppx);
		LOG(***ppppx);
		LOG(**ppppx);
		LOG(*ppppx);
		LOG(ppppx);
		LOG(&ppppx);

		std::cout << "\n";

		LOG(*****pppppx);
		LOG(****pppppx);
		LOG(***pppppx);
		LOG(**pppppx);
		LOG(*pppppx);
		LOG(pppppx);
		LOG(&pppppx);

		std::cout << "\n";

		LOG(******ppppppx);
		LOG(*****ppppppx);
		LOG(****ppppppx);
		LOG(***ppppppx);
		LOG(**ppppppx);
		LOG(*ppppppx);
		LOG(ppppppx);
		LOG(&ppppppx);
		
		std::cout << "\n";

		LOG(*******pppppppx);
		LOG(******pppppppx);
		LOG(*****pppppppx);
		LOG(****pppppppx);
		LOG(***pppppppx);
		LOG(**pppppppx);
		LOG(*pppppppx);
		LOG(pppppppx);
		LOG(&pppppppx);




	}


	int main() {
		auto start_time = std::chrono::high_resolution_clock::now();
		funcPart0();

		auto end_time = std::chrono::high_resolution_clock::now();
		auto duration = std::chrono::duration_cast<std::chrono::microseconds>(end_time - start_time);
		std::cout << "\nTime taken at Total : " << duration.count() / 1000.0 << " millisecond" << std::endl;

		return 0;
	}

範例輸出1:

LOG  [int] x = [1]                                      At funcPart0      ,line 00080
LOG  [int * __ptr64] &x = [0000008BC15BF694]            At funcPart0      ,line 00081

LOG  [int] *px = [1]                                    At funcPart0      ,line 00085
LOG  [int * __ptr64] px = [0000008BC15BF694]            At funcPart0      ,line 00086
LOG  [int * __ptr64 * __ptr64] &px = [0000008BC15BF6B8] At funcPart0      ,line 00087

LOG  [int] **ppx = [1]                                  At funcPart0      ,line 00091
LOG  [int * __ptr64] *ppx = [0000008BC15BF694]          At funcPart0      ,line 00092
LOG  [int * __ptr64 * __ptr64] ppx = [0000008BC15BF6B8] At funcPart0      ,line 00093
LOG  [int * __ptr64 * __ptr64 * __ptr64] &ppx = [0000008BC15BF6D8] At funcPart0      ,line 00094

LOG  [int] ***pppx = [1]                                At funcPart0      ,line 00098
LOG  [int * __ptr64] **pppx = [0000008BC15BF694]        At funcPart0      ,line 00099
LOG  [int * __ptr64 * __ptr64] *pppx = [0000008BC15BF6B8] At funcPart0      ,line 00100
LOG  [int * __ptr64 * __ptr64 * __ptr64] pppx = [0000008BC15BF6D8] At funcPart0      ,line 00101
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64] &pppx = [0000008BC15BF6F8] At funcPart0      ,line 00102

LOG  [int] ****ppppx = [1]                              At funcPart0      ,line 00106
LOG  [int * __ptr64] ***ppppx = [0000008BC15BF694]      At funcPart0      ,line 00107
LOG  [int * __ptr64 * __ptr64] **ppppx = [0000008BC15BF6B8] At funcPart0      ,line 00108
LOG  [int * __ptr64 * __ptr64 * __ptr64] *ppppx = [0000008BC15BF6D8] At funcPart0      ,line 00109
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64] ppppx = [0000008BC15BF6F8] At funcPart0      ,line 00110
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] &ppppx = [0000008BC15BF718] At funcPart0      ,line 00111

LOG  [int] *****pppppx = [1]                            At funcPart0      ,line 00115
LOG  [int * __ptr64] ****pppppx = [0000008BC15BF694]    At funcPart0      ,line 00116
LOG  [int * __ptr64 * __ptr64] ***pppppx = [0000008BC15BF6B8] At funcPart0      ,line 00117
LOG  [int * __ptr64 * __ptr64 * __ptr64] **pppppx = [0000008BC15BF6D8] At funcPart0      ,line 00118
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64] *pppppx = [0000008BC15BF6F8] At funcPart0      ,line 00119
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] pppppx = [0000008BC15BF718] At funcPart0      ,line 00120
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] &pppppx = [0000008BC15BF738] At funcPart0      ,line 00121

LOG  [int] ******ppppppx = [1]                          At funcPart0      ,line 00125
LOG  [int * __ptr64] *****ppppppx = [0000008BC15BF694]  At funcPart0      ,line 00126
LOG  [int * __ptr64 * __ptr64] ****ppppppx = [0000008BC15BF6B8] At funcPart0      ,line 00127
LOG  [int * __ptr64 * __ptr64 * __ptr64] ***ppppppx = [0000008BC15BF6D8] At funcPart0      ,line 00128
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64] **ppppppx = [0000008BC15BF6F8] At funcPart0      ,line 00129
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] *ppppppx = [0000008BC15BF718] At funcPart0      ,line 00130
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] ppppppx = [0000008BC15BF738] At funcPart0      ,line 00131
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] &ppppppx = [0000008BC15BF758] At funcPart0      ,line 00132

LOG  [int] *******pppppppx = [1]                        At funcPart0      ,line 00136
LOG  [int * __ptr64] ******pppppppx = [0000008BC15BF694] At funcPart0      ,line 00137
LOG  [int * __ptr64 * __ptr64] *****pppppppx = [0000008BC15BF6B8] At funcPart0      ,line 00138
LOG  [int * __ptr64 * __ptr64 * __ptr64] ****pppppppx = [0000008BC15BF6D8] At funcPart0      ,line 00139
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64] ***pppppppx = [0000008BC15BF6F8] At funcPart0      ,line 00140
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] **pppppppx = [0000008BC15BF718] At funcPart0      ,line 00141
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] *pppppppx = [0000008BC15BF738] At funcPart0      ,line 00142
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] pppppppx = [0000008BC15BF758] At funcPart0      ,line 00143
LOG  [int * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64 * __ptr64] &pppppppx = [0000008BC15BF778] At funcPart0      ,line 00144

Time taken at Total : 29.428 millisecond

從範例可知,

x變量

可以訪問到1 一級地址(它本身的地址)

px一級指針

可以訪問到1 一級地址 二級地址(它本身的地址)

ppx二級指針

可以訪問到1 一級地址 二級地址 三級地址(它本身的地址)

pppx三級指針

可以訪問到1 一級地址 二級地址 三級地址 四級地址(它本身的地址)

ppppx四級指針

可以訪問到1 一級地址 二級地址 三級地址 四級地址 五級地址(它本身的地址)

...

ppppppppx七級指針

可以訪問到1 一級地址 二級地址 三級地址 四級地址 五級地址 六級地址 七級地址 八級地址(它本身的地址) 

(結語)

在我的C++歷程中,使用三級指針就是極限了,不過出現任意關於指針的情況都能理解是好玩的。

c++對指針的級數應該是有限制的。

像是這樣。
    int************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************** testx ;

LOG(testx);

ERROR

 error C1026: 剖析器堆疊溢位,程式太複雜

堆疊溢位了,你看看你寫得像是人話嗎?

  • 36
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值