Obtaining an address given a (run time) variable name
DLearner
bmqazwsx123 at gmail.com
Mon Jan 20 22:32:02 UTC 2025
On Monday, 20 January 2025 at 19:54:19 UTC, Jonathan M Davis
wrote:
> On Monday, January 20, 2025 12:03:09 PM MST DLearner via
> Digitalmars-d-learn wrote:
>> // In the code below, what fn needs to go in the commented-out
>> line,
>> // to make the program print 7, 11 rather than 7, 7?
>>
>> ```
>> void main() {
>>
>> import std.stdio;
>>
>> int IntVar1 = 5;
>> int IntVar2 = 7;
>> int IntVar3 = 11;
>>
>> int* wkVarAddr;
>> char[] wkVarName;
>>
>>
>> wkVarAddr = &IntVar2;
>> writeln("*wkVarAddr = ", *wkVarAddr);
>>
>> wkVarName = cast(char[])("IntVar3");
>> // wkVarAddr = fn (wkVarName);
>> writeln("*wkVarAddr = ", *wkVarAddr);
>> }
>> ```
>>
>
> Variable names are not a thing at runtime.
[...]
> But the language isn't going to do anything like that for you
> automatically.
Agreed, I need to think about this further.
>
> Also, there's really no reason to be doing anything with char[]
> instead of string
[...]
If you _do_ need to mutate the string for some
> reason, then use dup to get a mutable copy rather than casting
> the literal, e.g.
>
> char[] wkVarName = "IntVar3".dup;
The reason for using char[] wasn't because there was a need to
mutate the elements.
It was because my understanding was that in certain situations
the string construct did not just produce a character array - it
also produced the (to me horrible) concept of adding a x'00'
immediately after the last character of the array.
Which could produce problems on concatenation, and doubt about
the length of the string.
char[] just worked properly.
>
> - Jonathan M Davis
More information about the Digitalmars-d-learn
mailing list