关于程序中指针与数组的分析
// Soln4_1.cpp#include <iostream>#include <iomanip>using namespace std;int main(){ int arraySize(5); double* values = new double[arraySize]; // Initial array to store values double* temp(nullptr); // Temporary store for pointer to new array double inputValue(0.0); // Current input value int index(0); // Index to the values array for(;;) { // Read the next value cout << "Enter a value or 0 to end: "; cin >> inputValue; // If it is 0 we are done so exit the loop if(inputValue == 0.0) break; values[index++] = inputValue; // Store the value and increment index if(index == arraySize) // If index reaches arraySize { // We need a bigger array... arraySize += 5; // Increase the array size value temp = new double[arraySize]; // Allocate the new array for(int i = 0 ; i<index ; i++) // Copy old array elements to new temp[i] = values[i]; delete[] values; // Delete the old array values = temp; // Store address of new array temp = nullptr; // Reset temp to null 为什么是指针而不是数组呢??我怎么感觉这个temp与values没有啥区别呀??? } } // Calcuate the average and output the values double average(0.0); // Store for the average for(int i = 0 ; i<index ; i++) { average += values[i]; // Add value cout << setw(10) << values[i]; // Output current value if((i+1)%5 == 0) // If it's multiple of 5 cout << endl; // start a new line } cout << endl // Output the average << "Average is " << average/index << endl; delete[] values; // Release memory for array values = nullptr; // Reset to null return 0;}
//这里是定义了一个指针values 指向arraySize * double大小的空间double* values = new double[arraySize]; // Initial array to store values//指针temp指向null double* temp(nullptr); // Temporary store for pointer to new array double inputValue(0.0); // Current input value int index(0); // Index to the values array for(;;) { // Read the next value cout << "Enter a value or 0 to end: "; cin >> inputValue; // If it is 0 we are done so exit the loop if(inputValue == 0.0) break; values[index++] = inputValue; // Store the value and increment index if(index == arraySize) // If index reaches arraySize { // We need a bigger array... arraySize += 5; // Increase the array size value//指针temp 指向arraySize * double大小空间,仔细想想 temp和values有什么区别?//都一样是个double类型的指针//将新分配的地址保存在temp中 temp = new double[arraySize]; // Allocate the new array for(int i = 0 ; i<index ; i++) // Copy old array elements to new temp[i] = values[i];//把values的值赋给temp即新分配的空间//将原来的new的空间delete掉 delete[] values; // Delete the old array//让values指向刚才分配的地址,地址刚在temp中保存着 values = temp; // Store address of new array temp = nullptr; // Reset temp to null } }
[解决办法]
形如:type* ptype = xxxx;类型的定义或赋值
ptype都是指针变量,ptype的值是xxxx的地址,如果xxxx是数组,那么ytype就是这个数组的首地址,如果xxxx是简单变量或者对象,那ptype的值就是这个变量或对象的地址。
而形如:
type artype[length];
artype是数组变量,但是artype可理解为指针,他的值是数组的首地址。
[解决办法]