Thread pointer auf string (3 answers)
Opened by Graf Herschel at 2016-03-16 21:20

murphy
 2016-03-16 21:46
#184203 #184203
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
In C musst Du Zeiger dereferenzieren, wenn Du auf ihr Ziel zugreifen willst und in Perl musst Du Referenzen auch dereferenzieren, wenn Du auf ihr Ziel zugreifen willst.

Du schreibst in Perl so etwas:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use 5.012;

sub doit {
  my ($strref) = @_;
  $strref = "blubb";
}

my $str = "foo";
doit(\$str);
say $str;

Dabei kommt natürlich "foo" heraus, denn das ist ungefähr so, wie wenn Du in C das hier machst:
Code (c): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

void doit(const char **strref) {
  strref = (const char **)"blubb";
}

int main(void) {
  const char *str = "foo";
  doit(&str);
  printf("%s\n", str);
  return 0;
}


Bei dem C-Code merkst Du schon an dem hässlichen Typecast in Zeile 4, dass das konzeptionell irgendwie blödsinnig ist ;-) Was Du eigentlich willst, sieht in Perl so aus:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
use 5.012;

sub doit {
  my ($strref) = @_;
  $$strref = "blubb";
}

my $str = "foo";
doit(\$str);
say $str;

Und die Entsprechung in C wäre das:
Code (c): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>

void doit(const char **strref) {
  *strref = "blubb";
}

int main(void) {
  const char *str = "foo";
  doit(&str);
  printf("%s\n", str);
  return 0;
}


Man beachte insbesondere die Dereferenzierungsoperatoren $ bzw. * in Zeile 5 bzw. 4.
When C++ is your hammer, every problem looks like your thumb.

View full thread pointer auf string