No.5ベストアンサー
- 回答日時:
> C言語が、ポインタの機能で何を実現できているのか
データをコピーする手間を無くすことができます。
例えば要素の合計を求める関数を作って、その引数として要素100個の配列を渡すとしましょう。
関数の実行時には一時的にメモリ上に必要な作業エリアを確保します。
ポインタが無い場合は、作業エリアに要素100個を全てコピーしてきて、それを元に計算を始めます。
でもポインタがある場合は、元々の配列のアドレスだけをコピーしてきて、そのアドレスを進めながらアドレス先のデータを取得するという動作で計算を進めることができます。
データが1000個、10000個だったら、コピーする手間が更に余計にかかりますよね?
> C言語において、ポインタは、必須だったのでしょうか?
C言語はアセンブリ言語の面倒くささを改善するために作成されました。
アセンブリ言語でのプログラムを経験されればお分かりになると思いますがアクセスするメモリのアドレスを決定するのに「間接アドレッシング」が多用されます、これがポインタそのものなんですよね。
従ってアセンブリ言語の延長として開発されたC言語にはポインタ機能は当然存在すべきものだったと思います。
> 例えば、pythonや他の言語では、ポインタはなかったと思います。
他の方も仰っていますが見えなくなっているだけでポインタは存在します。
例えばPythonでインスタンスを宣言した場合の
p = MyClass()
このpはポインタそのものです。
ただ、ポインタであることを意識しなくても良いように考えられているだけなんですよね。
> C言語の初心者が、ポインタがわかりにくいということがよくあると思います。
これはC言語でのポインタの記述の仕方が分かりにくいというのも多分にあると思います。
当初は「分かっている人」だけが使う為に設計された言語ですから、あまり考慮されなかったのですね。
ですから後に続く言語は、ポインタを意識しなくても良い様になったのではないでしょうか?
コメントありがとうございます。
下名自身は、慣れで、ポインタがわかりにくいと感じることはないですが、
以前は、なんとなく、わかりにくい気がした記憶はあります。
例えば、
char aaa[10];
とかで、aaaがポインタと言われても、、、、という感じがあるんですかね。
あと、変数を格納するメモリの意識があまりないのかも?、という気もしました。
No.6
- 回答日時:
現在の Fortran にはポインタが存在しますが, 最初の FORTRAN にポインタというものは存在しません. こういう事例もあったりします.
あと「表向き『ポインタ』が存在しないように見える」のは
ポインタがあまりにも強力かつ自由なので勝手なことをすると危険
という知見も含まれているかもしれません>#5. その代わりに「自動的にアドレスからオブジェクトに変換する」ものを導入して「勝手気まま」にできないようにして, 心機一転「参照」という呼称を導入した... と妄想してみたりする. いろいろいわれる goto でも, いくつかの形でその機能は残ってますし.
No.4
- 回答日時:
>例えば、pythonや他の言語では、ポインタはなかったと思います。
んなぁ事ぁないです。
PASCAL、アセンブリ言語では当たり前にあります。
>C言語において、ポインタは、必須だったのでしょうか?
逆に問いたいですね。近頃の言語がポインタを排除して何のメリットがあったのでしょう。
どうせ初心者が使わないのなら残して問題無かったはずですが…
No.3
- 回答日時:
実は, 多くの言語で「ポインタ」は存在する. ただ, 特に「現代的」な言語では「ポインタ」として意識しなくていいようにいろいろなことをやっているので「ポインタはなかった」ように思えるだけに過ぎない. 例えば Java のような「オブジェクト指向」言語では「オブジェクトのアイデンティティ」はアドレスにあるので, それを表すために「ポインタ」を使わないわけにはいかない (「ポインタ」と呼んではいないけど). #1 でいわれている「ポインターの概念を理解していないと、とても判りにくい言語だと思います」はまさにそのことだね.
あと C はアセンブリ言語の代替でもあるので, その意味でもポインタがないと困る.
No.1
- 回答日時:
>>C言語において、ポインタは、必須だったのでしょうか?
C言語は、高級アセンブラともいわれています。
つまりは、機械語に近い言語なんですね。
Javaはポインターが無いとかいわれたりしますが、ポインターの概念を理解していないと、とても判りにくい言語だと思います。
まあ、ポインター無しにしたとき、処理のオーバヘッドが増えます。
それを許すプログラムもあるでしょうが、そうじゃあないプログラムもありますからね。
なおC言語には配列があります。
配列だけで済むプログラムであればいいのですけど、経験からすれば、複雑な機能を実現するには、ポインターは必須の機能ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 双方向リスト 1 2023/06/28 04:16
- C言語・C++・C# C言語で構造体の参照渡しができません 2 2022/12/18 21:22
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# いまc言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri- 3 2023/07/06 18:59
- その他(プログラミング・Web制作) プログラミングについて(Python) 添付した画像はC言語で簡単に作ったソースで、1つの配列に5つ 3 2022/09/10 19:15
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- C言語・C++・C# C言語初心者 構造体 課題について 2 2023/03/10 19:48
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- 哲学 日本語は 言語類型として あたかも始原のごとくである 3 2022/05/29 04:41
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
戻り値で構造体を返すことは可...
-
printfとscanfの違いって・・・
-
#define NULL ((void *)0) の弊害
-
ExcelVBAでのkernel32(64bit)
-
CWnd::EnableWindow()の扱い方
-
PASCALとFARの意味
-
特定のソフトにアクセスできな...
-
C言語 配列の長さの上限
-
関数から配列を返すには?
-
プログラムによく出てくるst...
-
C言語の課題が出たのですが自力...
-
構造体のextern方法
-
本日までの累計を表示させたい!
-
Cのエラー
-
プログラミング MATLAB
-
C言語において、 配列要素をひ...
-
C言語のプログラムについてです
-
const char* s1とただのchar s1...
-
#N/Aを含む列の最小値の求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
Run-Time Check Failure #3とい...
-
fopne で失敗する原因
-
戻り値で構造体を返すことは可...
-
LPSTR型の初期化について
-
参照型で受け取った引数をポイ...
-
ExcelVBAでのkernel32(64bit)
-
ハンドル、アドレス、ポインタ...
-
ハンドルはポインタか
-
C言語でのconstを返す関数
-
デバイスハンドルとは?
-
Cで作成したDLL関数をVBから呼...
-
popenした子プロセスのプロセス...
-
c言語で任意のファイルから読み...
-
[excel vba] マウスポインタの...
-
プーさんのマウスポインタを教...
-
パスからファイル名を抽出
-
基本アルゴリズムの『返す』の...
おすすめ情報