Muhtemelen bu zor bir soru değildir, ancak Visual C++'da argüman olarak String tipini nasıl kullanacağım konusunda biraz kafam karışmış olur.C++/CLI'de bir argümanı referans olarak verin, böylece yeniden atama arayanı etkiler
void function_1(String ^str_1)
{
str_1 = gcnew String("Test");
}
void function_2()
{
String ^str_2 = nullptr;
function_1(str_2);
}
function_1
çağırdıktan sonra str_2
hala null
eşittir, ama ne ulaşmak istiyoruz str_2
Test
eşit olmasıdır: Ben işlevlerine aşağıdakilere sahip. Yani, nasıl str_1
içeriği function_2
geçirilir elde edebilirsiniz?
Her türlü öneriniz için teşekkürler.
void function_1(String ^%str_1)
{
str_1 = gcnew String("Test");
}
Açıklama:String ^
geçen bir işaretçi geçen gibidir
teşekkürler! Bugün bir şey öğrendim! – stefangachter
@Agnel Neden bir işaretçiyi geçtiğinizde, yalnızca referansın yerel kopyalarının değiştirildiğini söylemediğini anlamıyorum. Öncelikle bir işaretçi referans değildir. İkinci olarak, C++ 'da bir işaretçiyi geçirirseniz ve işaret ettiği verileri değiştirirseniz, verilerin yerel bir kopyasını değiştirmezsiniz. Semantiğe karışmış mıydım? – Ian
@Ian, Demek istediğim, bir işaretçiyi iletir ve işaretçi değişkeninin değerini değiştirirse (işaret ettiği verinin değerinin tersine), sadece yerel işaretçi değişkenin değeri değişir. Ve evet, bir işaretçinin işaret ettiği verileri değiştirirseniz, verilerin kendisi de yerel kopyada değiştirilmez. Verilerin yerel kopyası yok; işaretçinin yerel bir kopyası var. –