我目前正在为一个类编写程序,该类将用户输入添加到动态数组中或从动态数组中删除数字,然后按升序打印数组的所有值。
根据我已经研究过的,我需要做的就是获取要打印的数组中元素的值,以确保在指针名称旁边插入解除引用操作符。但是,当完成如下( newArray [i])时,我得到一个编译时错误,说明' '右边的操作数。必须是一个指针,即使newArray在函数的开头被声明为指针。
void output(int *arrayPtr, int size){
int small;
int i, j;
int *newArray;
newArray = new int[size];
for (i = 0; i < size; i++){
*newArray[i] = arrayPtr[i];
}
for (i = 0; i < size; i++){
small = *newArray[i];
for (j = 0; j < size; j++){
if (*newArray[j] < small){
*newArray[j] = small;
}
std::cout << small;
}
int number = small;
removeNumber(*& arrayPtr, number, size);
}
}
我觉得有一些我完全不知道的东西,但我非常感谢任何帮助或想法!
答案 0 :(得分:1)
small = *newArray[i];
那应该只是:
small = newArray[i];
(在您比较/分配*newArray[i]
您的第一个操作是首先取消引用newArray,这意味着它获取数组中第一个元素的值,然后尝试对其进行索引。元素不是指针,所以这当然失败了。索引时,它还隐式取消引用指针。你也可以写:
small = *(newArray + i);
但是,通常只在需要实际指针时使用指针运算,因为如果需要值,索引更容易阅读。
通过您的代码,其他一些事情似乎已经消失:
for (i = 0; i < size; i++){
*newArray[i] = arrayPtr[i];
}
这可能会编译,但我不认为这是对的,我猜你的意思是:
for (i = 0; i < size; i++){
newArray[i] = arrayPtr[i];
}
此外:
removeNumber(*& arrayPtr, number, size);
虽然这在技术上是正确的,但*&
首先返回指针引用,然后转身并再次取消引用它。如果编译器无论如何都要优化它,我不会感到惊讶,但这是不必要的。