なぜ私は反対票を投じられているのですか? 彼は変数を変更し、関数呼び出し後に状態を保持したいと考えています。(彼は変数がクラスのメンバーであるかどうかを指定していないので、そうではないと想定しています。彼が質問を明確にし、曖昧さを減らして述べている場合は、答えを変更します。)
あなたはこれについて間違っています。関数のスコープが終了した後も変数を保持するには、スタックではなくヒープに変数を割り当てる必要があります。new
またはを使用malloc
してこれを行うことができますが、このメモリを解放するには、delete
およびfree
をこの順序で使用する必要があります。
new
とdelete
: _
#include <iostream>
void modify(int * p){
(*p)++;
}
int main(void){
int * pointer = new int;
*pointer = 5;
std::cout << *pointer << std::endl;
modify(pointer);
std::cout << *pointer << std::endl;
delete pointer;
return 0;
}
そしてmalloc
とfree
:
#include <iostream>
#include <cstdlib>
void modify(int * p){
(*p)++;
}
int main(void){
int * pointer = (int*)malloc(sizeof(int)); //DO NOT CAST IN C
*pointer = 5;
std::cout << *pointer << std::endl;
modify(pointer);
std::cout << *pointer << std::endl;
free(pointer);
return 0;
}
new
配列をすばやく削除するための機能を提供し、通常の使用 C++ では全体的に優れています。