c语言缓冲区有关问题及c++中的this指针

c语言缓冲区问题及c++中的this指针
1.怎么改变c中缓冲区的大小,使用setbuf[stout,buf];改变buf的大小并不能改变缓冲区的大小,而函数
说明中要求把buf大小设置成BUFSIZ,是不是可以理解为使用此方法,无论buf设置多大,缓冲区都默认大小为
BUFSIZ,是否有方法可以修改BUFSIZ的大小(我使用指针修改,编译器报错 int *p = &BUFSIZ)?
2.c++中成员函数的this指针是怎么传递的,望详解给出this指针的传递过程

------解决方案--------------------
1. int *p = &BUFSIZ //常量没有地址,怎么将其赋值给指针?
2.

this指针是隐藏参数,

aClsObj.aFun( <参数表>)编译后 会生成应该新函数名(C++名字粉粹后形成)和参数表,看起来像这样

bFun(this,<参数表>)
------解决方案--------------------
常量的问题,一楼已经解释了。
第二个问题:this指针的传递,不同编译器有不同的实现,VC的话,是放在寄存器ECX中的,其他的编译器普遍做法是放在参数表的第一个参数的位置。
你可以研究一下THUNK技术,你就会了解了。

#include "stdafx.h"
#include <iostream>
#include <Windows.h>

typedef void (*callback)();

void testcall(callback cb){
cb();
}

#pragma pack(push, 1)    //不使用内存对齐
struct thunk_code{    //thunk关键点
unsigned char m_mov;
unsigned long m_pthis;
unsigned char m_call;
unsigned long m_realaddr;
void init(unsigned long pthis,unsigned long pfun){
m_mov = 0xB9;
m_pthis = pthis;
m_call = 0xE9;
m_realaddr = pfun - (unsigned long)(void*)(this+1);
}
};
#pragma pack(pop)

class A{
public:
void show(){
std::cout << "Hello Thrunk!" << std::endl;
}
};

template <class outType,class inType>
outType GetMemAddr(inType inT){
union {
inType inT;
outType outT;
}t;
t.inT = inT;
return t.outT;
}


int _tmain(int argc, _TCHAR* argv[])
{
struct thunk_code thunk;
A a;
thunk.init((unsigned long)&a,GetMemAddr<unsigned long>(&A::show));

callback cba = (callback)&thunk;
a.show();
return 0;
}

你先看看上面的代码,不懂的可以问我