学习c++的朋友们,请帮忙看看我这个用这指针的main()

int main() { int i,voild,s=1; int ch[8],*n; cout<<"Please enter 8 bit binary number:"; cin>>new ch[8]; //错误 n=&ch[8];//错误 if(*n==1) for(i=7;i<=7;i++) {s=power(2,i); //错误 voild+=s;} cout<<"value is:"<<voild; } double power(double x,int n) { double vol=1.0; while(n--) vol*=x; return (vol); } 这是一个2进制转化10进制的函数。我想用数组装载输入的八位2进制数用new动态分配下空间来存放这8个数,然后用指针指向 数组中的具体数值,从最左边开始一次指到最右边,如果是‘1’那么就调用power();然后把结果累加起来。 有一个心结就是我用指针的时候总是出问题,书上的例子全能看明白,可是自己写 的程序就是有错误,我在写些例子请明白的帮我详细解释下: char ch[10]; int *n; *n=ch[10]; *n=&ch[10]; n=ch[10]; n->ch[10]; n=&ch[10]; 我可能是书没看太明白,反正是网络也不怕出丑 呵呵 麻烦各位了;我只有30分先给10分吧 顺便问下怎么能加分(回答别的问题我是够呛了)

第1个回答  2020-05-12
如果用new来申请空间的话,必须有实例化的指针变量。
比如我们可以这样写:
char
*p
=
new
char[8];
int
*ch
=
new
int[8];
含义是,定义一个char指针p,并为其申请8个字符的数组空间,p指向这段空间的首地址。ch类似。
错误的写法:
cin>>new
ch[8];
原因:
(1)
首先,C/C++中,没有ch类型。new操作符后必须紧跟一个数据类型,比如new
int,但是不能紧跟某变量名。
(2)
其次,从上面的例子我们可以看到,new
char[8]的返回值应该是一个char指针,而cin是将控制台的用户输入存放到某个变量中,C/C++中不允许直接给指针赋值,因此不能这么写。
(3)
不可以使用cin一次性对某数组赋值,必须外套for/while/do-while循环来进行赋值操作。
正确的写法:
int
*ch
=
new
int[8];
for(int
i=0;i<8;i++)
cin>>ch[i];
错误的写法:
n=&ch[8];
首先我们要明确自己要干什么。写这句的时候,我们实际的意思是想将n(整型指针)指向ch数组的尾单元(第8个元素),但是实际上n=&ch[8]的含义是:将n指向ch数组的第9个元素。
正确的写法:
n
=
&ch[7];
或者
n
=
ch;
错误的写法:
for(i=7;i<=7;i++)
这样写的含义是:初始i=7,当i<=7满足时,执行循环体,每次执行结束时i++。
那么最终执行循环体的次数仅仅为1次。
正确的写法:
for(i=0;i<8;i++)
错误的写法:
int
s=1;
s=power(2,i);
源程序中,power的返回值类型为double,但是这里s的类型为int,虽然可以将double值赋给int类型的变量,但是在此之前需要进行强制类型转换。
因此要么将power函数的返回值定义为int,要么在上述语句中增加强制类型转换。
正确的写法:
int
s=1;
s=(int)power(2,i);
double
power(....
或者
int
s=1;
s=power(2,i);
int
power(...
关于你的源码,我没有怎么细看,现在的问题是你有很多基础知识掌握的不牢靠,撇开代码实现的功能不谈,很多概念性的错误是不应该犯的。
另外,从楼主写的代码来看,对指针、类型转换、以及动态内存分配的相关知识都需要加强,建议多向老师和同学提提问题,多动手写写代码。
附:
char
ch[10];
//
定义一个含10个元素的字符数组ch
int
*n;
//
定义一个整型指针n
//
从这里往下,我们默认ch定义为int
ch[11];
//
否则很多地方将需要进行强制类型转换
*n=ch[10];
//
将ch数组的第11个元素赋值给n指向的内容。
*n=&ch[10];
//
错误。如果写成
n=&ch[10]则正确。表示将ch第11个元素的地址赋值给n这个整型指针。
n=ch[10];
//
错误。等号左边是整型指针,右边是整型值。
n->ch[10];
//
错误。“->”仅在其左边是一个结构体指针或者类指针时才有效,此时,该符号右边应该是该结构体指针或者类指针的一个成员变量或者函数。
n=&ch[10];
//
正确。
注意:以上几句有很多数组下标越界的问题我没有明确标出,ch[10]指的是ch的第11个元素而不是第10个。
相似回答
大家正在搜