这里主要介绍C++中动态申请二维数组的两种方式,直接给出代码,很容易明白,简单的作为一个笔记。
#include <iostream> #include <iomanip> // 输入输出操纵 #include <vector> using namespace std; // 法一:new 方式申请 void dynamicArray() { int rows, cols; cin >> rows >> cols; int **element = new int* [rows]; // 申请二维动态数组 int i; for (i = 0; i < rows; i++) element[i] = new int[cols]; int j; for(i = 0; i < rows; i++) // 初始化 { for (j = 0; j < cols; j++) { cin >> element[i][j]; } } for (i = 0; i < rows; i++) { for(j = 0; j < cols; j++) { cout << setw(4) << element[i][j]; // 每个输出占四个字符,前面以空格填充 //cout << setfill('*') << element[i][j]; // 空格以*填充 } cout << endl; } for(i = 0; i < rows; i++) // 释放动态数组 { delete []element[i]; } delete []element; } // 法二:vector 方式 没用new无需释放 void dynamicArray2() { int rows, cols; cin >> rows >> cols; vector<vector<int>> element(rows, vector<int>(cols)); // 用vector申请二维动态数组 int i,j; for(i = 0; i < rows; i++) // 初始化 { for (j = 0; j < cols; j++) { cin >> element[i][j]; } } for (i = 0; i < rows; i++) { for(j = 0; j < cols; j++) { cout << setw(4) << element[i][j]; // 每个输出占四个字符,前面以空格填充 //cout << setfill('*') << element[i][j]; // 空格以*填充 } cout << endl; } }
cout << "d5 = " << fixed<<setprecision(2)<< d5 << endl; 保留小数点两位
参考blog:1:http://www.cnblogs.com/China3S/p/3616938.html
2:http://blog.sina.com.cn/s/blog_afe2af380101b4gz.html
二维数组a[m][n]
a+i是指向a[i]的指针,而a[i]是指向a[i][0]的指针,所以*(a+i)与a[i] 及&a[i][0]等同。但是C中规定a+i及&a[i]的内容与*(a+i), a[i]一样。。。 http://c.biancheng.net/cpp/html/2930.html
int *p[4] 为指针数组;;而int (*p)[4]为数组指针。 http://blog.csdn.net/lu597203933/article/details/39404565
char *c[] = { "ENTER", "NEW", "POINT", "FIRST" }; char **cp[] = { c+3, c+2, c+1, c }; char ***cpp = cp; int main(void) { printf("%s", **++cpp); printf("%s", *--*++cpp+3); printf("%s", *cpp[-2]+3); printf("%s\n", cpp[-1][-1]+1); return 0; }
结果为:POINTERSTEW