请问这几个指针如何初始化? int *a,double *b,bool *c,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 初始化为啥?空?可以这样:int *a = 0;double *b = 0;bool *c = 0; int *a = NULL;double *b = NULL;bool *c = NULL; 作为函数参数传递过去,int *a = 0不行,指针地址变成0了,赋值则出错,NULL也不行 自己试了下这样可以int aa=0;int *a = &aa;double bb =0;double *b = &bbbool cc=0;bool *c = &cc;感觉太别扭了啊,有没有简便点的方法? 自己试了下这样可以int aa=0;int *a = &aa;double bb =0;double *b = &bbbool cc=0;bool *c = &cc;感觉太别扭了啊,有没有简便点的方法? 可能我没说清楚,因为要调如下格式的函数func(int,int*,double*,char*,bool*)其中int是传入参数,而int*,double*,char*,bool*是返回值,所以要初始化几个指针,并传给函数调用,然后到这几个指针地址取返回值 如果是用在函数参数中的指针不用初始化的,比如对double *来说,定义一个double变量,比如 double dd,然后调用写成:func(..,&dd,...)就行了,其余的以此类推。 感谢!,不过我的情况有点复杂,这几个指针地址是我的类的私有成员变量来的,而这个函数是在DLL中,这几个指针不初始化不行,报无法写入的异常 例如要把char*作为参数返回,我现在是这样解决的char *msg = new char[100];func(int,msg)delete msg这样可以返回正确的值到msg,但凭什么new char[100],而不是new char[200]呢,我是知道返回字符串长度目前不可能超过100,但万一以后函数内部处理修改了,返回字符串长度大于100,岂不就出错了,作为一个初学者,真的觉得c++的指针实在太灵活,太容易错,也太危险了! 你的意思是不是是不是说,你要传进函数的那几个指针所指向的变量要在函数里面被改变啊?如果是这样的话,何必要多声明几个指针变量呢。你这样不就OK!double dReceiveVal = 0.0f;char cReceiveVal = '\0';bool bReceiveVal = false;//函数调用后上面的三个值都会被函数改变啊。func( 88, &dReceiveVal, &cReceiveVal, & bReceiveVal ); //Do something else.. 如下结构class A{private: int *a; double* b; char* c; bool* d;public f(int,int* a,double* b,char* c,bool* d);}A::f(int,a,b,c,d){ func(int,a,b,c,d),需要返回结果到a,b,c,d中}而func又是在dll中的函数啊,我本意是自己写个类把这个DLL封装起来,可能是有点混乱,可谁让DLL这样传递返回值的的呢?郁闷啊 这个和DLL没有什么关系,因为a,b,c,d是成员函数,所以在构造函数里面new一下不就行了。 谢谢您的指点,最终也是这样做的了,在构造函数里采用new的方法初始化这些指针,其实归根到底还是我对指针不熟悉。 看来你的基础确实还不够巩固,我猜你是把我的代码这样引用了吧class A{private: int a; double b = 0.0f; char c = '\0'; bool d = false; //....};这样做当然是不行的,如果不是静态成员变量也就是有static声明,那么你这样做当然是不行的。非静态成员变量的声明和赋值必须分开,你要么在构造函数里面给成员变量赋值,要么在该类的其他的成员函数里面给成员变量赋值。总之这样做,不管该成员变量的属性如何,都不会通过编译的!你可以这样改class A{private: int a; double b; char c; bool d;public: A(); //构造函数 ~A(); //析构函数public: void func( int, double*, char*, bool* ); void AnotherFunc();};A::A(){ a = 88; b = 0.0f; c = '\0'; d = false; //构造函数里面成员变量赋值} void A::func( int a, double* b, char* c, bool* d ){ /* * * Some operation */}void A::AnotherFunc(){ //... func( a, &b, &c, &d ); //...} vs2005创建ADO DATA 控件 MFC对话框传递参数 线程不同步问题 利用socket,怎么得到下载速度??? LNK2001,请教 谁能解释一下GetDesktopWindow() 想问大家一个小问题!希望各位DX不吝赐教! 如何编程实现获取其他程序窗口界面上的控件属性?比如一个button的label,height等属性? 哪位能给我源码:改变状态栏内前景背景色,分数快完了,只有一点点分 为什么不能查询变量的定义 工具栏按钮的onclick事件和wm_command消息之间有怎样的关系? 求 多媒体播放器准确播放的定时原理 !!!
int *a = 0;
double *b = 0;
bool *c = 0;
double *b = NULL;
bool *c = NULL;
int aa=0;
int *a = &aa;
double bb =0;
double *b = &bb
bool cc=0;
bool *c = &cc;
感觉太别扭了啊,有没有简便点的方法?
int aa=0;
int *a = &aa;
double bb =0;
double *b = &bb
bool cc=0;
bool *c = &cc;
感觉太别扭了啊,有没有简便点的方法?
func(int,int*,double*,char*,bool*)
其中int是传入参数,而int*,double*,char*,bool*是返回值,所以要初始化几个指针,并传给函数调用,然后到这几个指针地址取返回值
char *msg = new char[100];
func(int,msg)
delete msg
这样可以返回正确的值到msg,但凭什么new char[100],而不是new char[200]呢,我是知道返回字符串长度目前不可能超过100,但万一以后函数内部处理修改了,返回字符串长度大于100,岂不就出错了,作为一个初学者,真的觉得c++的指针实在太灵活,太容易错,也太危险了!
如果是这样的话,何必要多声明几个指针变量呢。你这样不就OK!double dReceiveVal = 0.0f;
char cReceiveVal = '\0';
bool bReceiveVal = false;//函数调用后上面的三个值都会被函数改变啊。func( 88, &dReceiveVal, &cReceiveVal, & bReceiveVal ); //Do something else..
class A
{
private:
int *a;
double* b;
char* c;
bool* d;
public
f(int,int* a,double* b,char* c,bool* d);
}
A::f(int,a,b,c,d)
{
func(int,a,b,c,d),需要返回结果到a,b,c,d中
}
而func又是在dll中的函数啊,我本意是自己写个类把这个DLL封装起来,可能是有点混乱,可谁让DLL这样传递返回值的的呢?郁闷啊
谢谢您的指点,最终也是这样做的了,在构造函数里采用new的方法初始化这些指针,其实归根到底还是我对指针不熟悉。
{
private:
int a;
double b = 0.0f;
char c = '\0';
bool d = false;
//....
};这样做当然是不行的,如果不是静态成员变量也就是有static声明,那么你这样做当然是不行的。
非静态成员变量的声明和赋值必须分开,你要么在构造函数里面给成员变量赋值,要么在该类的其他的成员函数里面给成员变量赋值。总之这样做,不管该成员变量的属性如何,都不会通过编译的!
你可以这样改class A
{
private:
int a;
double b;
char c;
bool d;
public:
A(); //构造函数
~A(); //析构函数
public:
void func( int, double*, char*, bool* );
void AnotherFunc();
};A::A()
{
a = 88;
b = 0.0f;
c = '\0';
d = false;
//构造函数里面成员变量赋值
} void A::func( int a, double* b, char* c, bool* d )
{
/*
*
* Some operation
*/
}void A::AnotherFunc()
{
//...
func( a, &b, &c, &d );
//...
}