以下C++程序里的Java++是什么意思?输出结果是~?

来源:百度知道 编辑:UC知道 时间:2024/05/28 18:58:15
{
int i;
double *basic, pascal[3];
for (i = 0; i < 3; i++)
{
pascal[i] = 6 / (i + 1);
}
Language(&basic, pascal[2], pascal);
//Draw a diagram indicating the contents of memory at this point.
}
void Language(double **logo, int c, double java[])
{
*logo = new double [c];
java++;
*(java + 1) = 4;
for (int i = 0; i < c; i++)
{
java[i] = java[i] / 2;
}
(*logo)[1] = 7;
**logo = 3.2;
}
这个程序一定是对的……

在C++里,数组的名是一个指针,维的是是普通指针,二维数组是下二重指针,多维的也一样.
指针的大小是固定的,就是一个int的大小,可是在声明指针时要说明是什么型的指针,这不是说int *a; long *a; __int64 *a;的大小不一样,你要是对上面三个用sizeof求一下全是等于sizeof(int)的,在我们常用的32位机里等于4
可是在声明指针时为什么还要有类型呢,这不只是为了以后申请空间用的(在声明指针时时分配了4个字节),还有一个是用来做 ++ 运算的步长的,也就是 ++ 要后移动多少个字节,你这里是double,就是移动sizeof(double)个字节
所以你的 java++就和 java[++i] 是一样的
还有,你这个程序没有错,可是要是换个数就不一定也没错了,因为你这里用的指针太不安全了,很容易越界
如果说是错就只是你申请的内存没有释放了这以后要注意
回来说你的结果吧
*logo = new double [c];
//分配两个double
java++;
//java指向java[1]
*(java + 1) = 4;
//java[2]=4
for (int i = 0; i < c; i++)
//这里你的C没有变,他已经传过来了,还是2,你的循环只能走两次
{
java[i] = java[i] / 2;
//这时你的java[0]指的是pascal的第二个元素,不要忘了你有过一次java++
}
(*logo)[1] = 7;
**logo = 3.2;

所以最后,你有这么几个数
pascal[3]; {6 ,1.5 ,2}
*basic指了两个double 分别是 3.2和7 可是用完没有释放内存

程序错误java是一个1维数组名 java++相当与 java[1]因为java是一个指针。

java++,明显是错的,没什么可争论的。

void Language(double **logo, int c, dou