• ベストアンサー

ポインタ

C言語のポインタみたいなことはできないかなと思い、 <? function a ($a){ print $a; $a="z"; } $c = "x"; a(&$c); print $c; ?> と興味本位でやってみたところ、 xz と表示されました。googleで "php ポインタ" と検索してもそれっぽい解説をみつけられなかったのですが、phpではC言語のポインタっぽい挙動をみせるこの機構をなんというのでしょうか・・・?(perlではリファレンスだった)

  • ytse
  • お礼率71% (88/123)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>この機構をなんというのでしょうか…? 引数の参照(リファレンス)渡し リファレンスに関しては参考URLに詳しい説明があります

参考URL:
http://www.php.net/manual/ja/language.references.php
ytse
質問者

お礼

BLUEPIXYさん、毎度お世話になります。 あの後、普通に「php リファレンス」で調べたらたくさんでてきました f^^; 参考にいただいたURLを覗いてみます。 ありがとうございました。

関連するQ&A

  • PerlでInline Cを使った配列の引渡し

    Perlで繰り返し計算をする部分を高速化しようとInline Cを使ってC言語のサブルーチンを作りました。 C言語単体なら、巨大な配列はポインタを使って引き渡すのですが。 Inline Cを使って、PerlからCへの巨大配列の引渡し方法が分かりません(><; 以下のように、リファレンスで渡してポインタで受け取る事もできないし。。。助けてください use Inline C; my @data; for(my $t=0;$t<=10000000;$t++){ $data[$t]=$t; } # C言語による処理 my $x = my_function_1(\@data); print "0から10の合計は$x\n"; __END__ __C__ // サブルーチン_1 long my_function_1(long *data){ long t; long t1=0; for(t=0;t<=10000000;t++){ t1=t1+data[t]; } return t1; }

    • ベストアンサー
    • Perl
  • Perlのリファレンスについて

    只今、Perlを勉強中なのですがリファレンスについてご質問させて頂ます。 Perlのリファレンスについて自分でも調べてみたのですが、いまいち使い方や使うメリットがよくわかりません。 どなたかわかりやすいサンプルなどと一緒に教えて頂けないでしょうか。 どういった場面で、どのように使うと便利なのかがわかりません。 そもそもリファレンスは積極的に使うべきものなのでしょうか? Perlのオブジェクト指向で使うものなのでしょうか? C言語のポインタと似てる、と説明されてもC言語は全く知らないのでイメージがつきません。 素人でもわかるようにご教授、またはサイトの紹介をお願い致します。

    • ベストアンサー
    • Perl
  • PHPにおいての関数ポインタ(リファレンス)の実装の仕方

    こんにちわ, 今PHP4.3.4を使用してWebを作成しています。 C言語で言う関数ポインタを実装したいのですが,どうすればいいのでしょうか。 たとえば, function hoge(){ return 5; } function hoge2(){ return 4; } function hoge3(){ return 3; } と宣言して function main($a, $b)[ return ($a + $b); } としたときに, main(hoge(), hoge2()); をしたときに9 main(hoge()2, hoge3()); をしたときに7 とするようにmainの関数をつくりたいのですが,どうすればいいのでしょうか。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • ポインタみたいなもの

    Perlってポインタは利用できないんですよね。配列の要素を1つ1つ処理していってその要素の内容によって更にその配列に要素を指定した順番に追加しながら処理していくような処理を実現するにはどうしたらよいのでしょうか。C言語だったら線形リストでできるのですが。

    • ベストアンサー
    • Perl
  • perlで配列のポインタをdllに渡すには?

    Active Perlの最新版(x86)を使っています。 C言語側で、 //配列の先頭要素へのポインタと配列の要素数を渡すと、要素の平均を整数で返す関数 int avr(int *array,int kazu) { int value=0; for(int i=0;i<kazu;i++) { value+=*(array+i); } return value/kazu; } などと書いて、avr.dllとしてビルドしたものを(モジュール定義はdefファイルにて指定)、 use Win32::API; my $function = Win32::API->new("avr", "avr", "PN", "N"); @array=(1,2,3,4,5); $avr=$function->Call(\@array,5); print "Content-type: text/html\n\n"; print $avr; と使ってみたのですが、出力値が期待の「3」ではなく、-123343252とか435893497などの無茶苦茶な数値になってしまいます。 配列のポインタの渡し方が違うのかとは思いますが、どう書いたら良いのか分からない状況です。 一応、他のプログラムからこのdllを使うと、正常動作するようです。

    • ベストアンサー
    • Perl
  • C言語のポインタについて教えてください。

    C言語のポインタについて教えてください。 ・pointer1.c  int main(){   int a;   int *p;   p = &a;     a = 123;   printf("%d", *p);   return 0;  } ・pointer2.c   int main(){ int a[100]; int *p; p = &a[0]; int i; for(i = 0; i < 100; i++) a[i] = i; for(i = 0; i < 100; i++) printf("%d", *p++); return 0; } と二つのソースコードがあるとき、pointer2.cの「p = &a[0]」をpointer1.cのように「p = &a」と書けないのはなぜですか?  また、「&a」は動かすことのできなく、「aを指し示す*p」は動かすことができる変数のようなもの、という認識に誤りはないでしょうか?  宜しくお願いします。

  • 親クラスのポインタ、クラスを指定しないポインタ

    親クラス A (抽象メソッドX、Yの2つを持つ) と 子クラス B-1 (親はA、抽象メソッドX、Y、Zの3つを持つ) 子クラス B-2 (親はA、抽象メソッドX、Y、Wの3つを持つ) のように、子クラスでポリモーフィズムを実現しているとき、 クラスC   「実行時に、iniファイルに(1)と書かれていたら、B-1のクラスで実体化し、   iniファイルに(2)と書かれていたら、B-2のクラスで実体化する」  というクラスを作りたいです。 //////////////////////////////////////////////////////////////// 質問(1) その際、クラスCは、どうやってもZのメソッドや、Wのメソッドは書けない認識です。 (メソッド名もiniファイルから取るようにすれば別でしょうが。) この認識であっていますでしょうか? 質問(2) 逆に、XとYについては、それぞれ挙動の違う処理を行わせることができる認識です。 (クラスCで、親クラスAのポインタ型の変数を用意しておき、  そのポインタに、DLLのインスタンス化したものをいれておけば、  メソッドXとYについては実行可能という認識です)

  • mapのポインタ

    C++標準ライブラリ map の使用法に関して質問させてください。 winXP, minGW環境最近でC++のプログラミングを始めました。 これまでperlを使っており、とくにハッシュを多用していました。 たとえば入力ファイルに区切りのついたデータがあり、区切りごとに個別のハッシュをつくり、ハッシュのリファレンスの配列を作成します。その後に配列にはいったすべてのリファレンスからハッシュを呼び出して、ハッシュのデータをつかって処理を行う などです。 *入力ファイルから区切りごとにハッシュ%hashを作成 $ref_of_hash = \%hash; push (@array_hash, $ref_of_hash); *ここまでは入力ファイルにしてループ処理 foreach $ref ( @array_hash){      %hash_again = %$ref; *ここでハッシュをつかって処理を行う。 } c++の標準ライブラリにmapがあり、ハッシュとは多少異なるとはいえ、私の使用用途には問題なかったので使い始めました。ですが、マップのポインタをつかった上記のような処理の方法がわからず困っています。 1)mapのポインタから mapの各要素を呼び出すにはどのようにしたらよいでしょうか? 2)mapのポインタをつかった場合 map<double,double>::iterator it; for( it = my_map.begin(); it != my_map.end(); it ++){ //do something } のようなイテレータを使う場合、.begin .engはポインタを使ってどのように記述すればよいでしょうか。 3)このようなmapのポインタを利用したソースが書かれているサイトなどがあれば教えていただけないでしょうか。 C++をはじめて間もないので用語の間違いや勘違いがあるかもしれませんが、よろしくお願いします。

  • PerlとPHPで同一ファイルをファイルロック

    PerlとPHPで同一のファイルを読み書きする必要があるのですが、ファイルロックする機構を作るには互いの言語でmkdirで対応したほうがよいのでしょうか? flock関数がPerlにもPHPにもありますが、これは、PHPのプロセスで実行したロックの状態をPerlで検知したり、または逆のことはできないのでしょうか? もしできないとするとmkdirで同一の機構を作ったほうが良い気もしますが、何か問題などは起きないでしょうか。

    • ベストアンサー
    • PHP
  • 文字列 ポインタ

    3つの文字ポインタを作成し,最初のポインタが「one」を,二番目のポインタが「two」を,三番目のポインタが「three」をさすように初期化するプログラムを作成しなさい.次にこれらの3つの文字列の順列をすべてプログラムに表示させなさい. という問題で順列をうまく並べる方法がわかりません.手打ちでprintを6個作ることはできますが... うまい方法があるかないか,どのような方法か教えてください.よろしくお願いします. #include<stdio.h> int main(void) { char *a,*b,*c,*t; int i; a="one"; b="two"; c="three"; printf("%s\t%s\t%s\n",a,b,c); return 0; }

専門家に質問してみよう