首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

关于程序中拇指针与数组的分析

2012-10-09 
关于程序中指针与数组的分析C/C++ code// Soln4_1.cpp#include iostream#include iomanipusing namesp

关于程序中指针与数组的分析

C/C++ code
// 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和temp不懂,定义的时候前一个是数组,后一个是指针,但是中间又为temp作为数组进行了动态分配地址并且进行了temp[i] = values[i]赋值,本人初学,望高手详细解释,谢谢!


[解决办法]
arraySize += 5;

这个数组的大小是可变的。C++编译器只允许声明一个大小已知的数组。
所以,要将原来数组里的东西复制到一个新的临时数组temp中。

为了释放内存,要delete[] values。

values = temp; 将数组名重新设置为values。

所以,temp values 不一样。大小不一样,故不是同一个数组。
[解决办法]
C/C++ code
//这里是定义了一个指针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可理解为指针,他的值是数组的首地址。

[解决办法]

探讨
刚开始我觉得temp和values并没有啥区别只是分配的空间大小不一样呀!都是数组呀,但看了您的解释说都是指针,我就有点迷糊了,难道不是数组吗?我所困惑的更是后面一个用delete[] values; 这可以理解,但为什么不可以用delete[] temp;(我试过后有问题,为什么会出现问题呢??) 而非得把temp指向空指针呢?这里的temp是指数组temp的首地址指向空指针还是就是指针……

[解决办法]
事实上 values何temp都是指针, 很明显, double*, double指针
new 返回的也是指针类型。
指针可以加减(p++, p--),也可以索引(p[i])
至于数组, 不能加减, 只能索引, 但可以转换成指针
(个人理解)

热点排行