
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を探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
ExcelVBAでのkernel32(64bit)
-
CImage GetBitsメソッドについて
-
NULLとブランクの違い
-
init関数の意味
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
戻り値で構造体を返すことは可...
-
アプリを32bitから64bit移行
-
参照型で受け取った引数をポイ...
-
無効なポインタ操作のエラー
-
popenした子プロセスのプロセス...
-
Voidポインタで受け取った変数...
-
【なぜポインタを使うのか】
-
ハンドルはポインタか
-
関数内、ファイルのstatic変数
-
デバイスハンドルとは?
-
C++で関数ポインタから関数名を...
-
ASPでACCESSマクロのNZ関...
-
パスからファイル名を抽出
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語のポインタに直接アドレス...
-
セグメントエラー
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
Run-Time Check Failure #3とい...
-
ExcelVBAでのkernel32(64bit)
-
LPSTR型の初期化について
-
参照型で受け取った引数をポイ...
-
アプリを32bitから64bit移行
-
c言語で任意のファイルから読み...
-
関数ポインタの利点
-
コンストラクタでnewを失敗した...
-
C++で関数ポインタから関数名を...
-
ポインタについて
-
ハンドルはポインタか
-
基本アルゴリズムの『返す』の...
-
無効なポインタ操作のエラー
-
関数にポインタを渡して動的確...
-
[C言語] NULLは必ず0(番地)です...
おすすめ情報