c++ 多维数组内存分配问题?指针引用字符串问题字符指针变量的问题
void array①() {ntint m = ②;ntint n = ②;ntint* a[m];//指针的数组ntfor (int i = ⓪; i m; i++)ntta[i] = new int[n];ntfor (int i = ⓪; i m; i++) {nttfor (int j = ⓪; j n; j++) {ntttcout a[i][j] 't';ntt}nttcout endl;nttcout a[i] endl;nt}ntfor (int i = ⓪; i m; i++)nttdelete[] a[i];n}nvoid array() {ntint ROW = ②;ntint COL = ②;ntint **p = new int* [ROW];nntfor (int i = ⓪; i ROW; i++) {nttp[i] = new int[COL];nttfor (int j = ⓪; j COL; j++) {ntttp[i][j] = (i + ②) * (j + ②);ntt}nt}ntfor (int i = ⓪; i ROW; i++) {nttfor (int j = ⓪; j COL; j++) {ntttcout p[i][j] 't';ntt}nnt}ntfor (int i = ⓪; i ROW; i++) {nttdelete[] p[i];nt}ntdelete [] p;n}
已经尝试过这两种方法 ,但是发现都不是在堆内存中连续存在的,有什么能在堆中连续分配的方法.
怎么还有只想用 C 部分的要求……
(以下名称的扭曲是因为感觉需求很奇怪)
我拿纯 C 写个,兼容 C++ :
#include struct douteki_nijigen_int { int *men_deita; int **men_baikai;};struct douteki_nijigen_int *douteki_nijigen_int_kouchiku(struct douteki_nijigen_int *kore, size_t nagasa, size_t hirosa) { kore->men_deita = (int*) malloc(nagasa * hirosa * sizeof(int)); kore->men_baikai = (int**) malloc(hirosa * sizeof(int*)); for (size_t i = ⓪; i < nagasa; ++i) kore->men_baikai[i] = kore->men_deita + i * hirosa; return kore;}void douteki_nijigen_int_shoukyo(struct douteki_nijigen_int *kore) { free(kore->men_deita); free(kore->men_baikai);}#include int main(void) { struct douteki_nijigen_int waga_hairetsu; douteki_nijigen_int_kouchiku( int **baikai = waga_hairetsu.men_baikai; printf(\"%pn%pn%pn%pn%pn%pn\", (void*) douteki_nijigen_int_shoukyo(}
重载的 operator[] 翻译到 C 就失去意义了,所以只好用上面说过的有 overhead 的写法。
如果你不排斥运算符重载的话我有这个:
#include // Chuui_seyo! Kyoukai_check nashi!template class nijigen_hairetsu {public: nijigen_hairetsu(std::size_t nagasa, std::size_t hirosa) : men_deita (new Kata[nagasa*hirosa]), men_hirosa(hirosa) {} ~nijigen_hairetsu(){ delete [] men_deita; } Kata *operator[](std::size_t indekkusu) { return men_deita+men_hirosa*indekkusu; } const Kata *operator[](std::size_t indekkusu) const { return men_deita+men_hirosa*indekkusu; } private: Kata *men_deita; std::size_t men_hirosa;#if __cplusplus < ②⓪①①⓪③L nijigen_hairetsu(){} nijigen_hairetsu(const nijigen_hairetsu nijigen_hairetsu(const nijigen_hairetsu nijigen_hairetsu #endif};int main(){ nijigen_hairetsu hairetsu(② · ③); std::cout
- 5星
- 4星
- 3星
- 2星
- 1星
- 暂无评论信息
