私は C++ プログラミングの初心者であり、 Alex Alllain の Jumping into C++という電子ブックを読んで言語を学ぼうとしています。現在、動的メモリ割り当ての章を終えており、ポインターが理解しにくいと言わざるを得ません。
この章の最後には、私が試すことができる一連の練習問題があります。任意の次元の乗算表を作成する関数を作成する最初の問題 (コードを機能させるのに時間がかかりました) を完了しました(問題にポインターを使用する必要があります)、しかし、それが正しい場合、私は自分の解決策に満足しておらず、ポインターを正しい方法で使用している場合は、経験のある人に欠陥を指摘してもらいたいです。問題に対する独自の解決策:
// pointerName.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <string>
#include <iostream>
#include <string>
void multTable(int size){
int ** x, result;
x = new int*[size]; // lets declare a pointer that will point to another pointer :).
result = 0;
for(int h = 0; h < size; h++){ // lets store the address of an array of integers.
x[h] = new int [size];
}
std::cout << std::endl << "*********************************" << std::endl; // lets seperate.
for(int i=0; i < size+1; i++){ // lets use the pointer like a two-dimensional array.
for(int j=0; j < size+1; j++){
result = i*j; // lets multiply the variables initialized from the for loop.
**x = result; // lets inialize the table.
std::cout << **x << "\t"; // dereference it and print out the whole table.
}
std::cout << std::endl;
}
/************* DEALLOCATE THE MEMORY SPACE ************/
for(int index = 0; index < size; index++){
delete [] x[index]; // free each row first.
}
delete [] x; // free the pointer itself.
}
int main(int argc, char* argv[]){
int num;
std::cout << "Please Enter a valid number: ";
std::cin >> num; // Lets prompt the user for a number.
multTable(num);
return 0;
}