No.2
- 回答日時:
>直接、配列や変数の値を渡してはダメなのでしょうか?
数値だと簡単で解りにくいから
まず文字列を扱う標準関数を使ってみたり、自分で文字列を操作する関数を作ってみてごらん
No.3
- 回答日時:
大体はなんとかできますね。
ただ、ポインタを使ったほうがスマートになります。
例えば、関数に配列を渡そうとしたら、
kannsuu(a[0],a[1],a[2]);
と、要素が数個なら良いですが、数十個超えると現実的ではなくなります。
そうするとグローバル変数を使えばいいですが、今度は変数の寿命が無駄に長くなり、読みにくいソースコードになります。
また、関数で戻り値を複数個返したいときもポインタを使えば引数で返すことができますが、ポインタを使わないとやはりグローバル変数を使うこととなり、読みにくい上に移植性が悪くなります。
No.4
- 回答日時:
「C言語が書ける」という日本語の意味が理解できないですが....
さておき規格上関数を呼び出すためには「関数へのポインタ」が必須なので, 「ポインタを使わない」とすると理屈的には
関数が呼び出せない
とすらいえるな.
もちろん関数を呼び出さなきゃいいので
int main()
{
}
くらいのプログラムなら書けるが, 逆にいえば
これくらいしか書けない
んだけど, それでいい?
これとは別件だけど関数に配列を渡すと自動的にポインタになっちゃうから, 「ポインタを使わない」とするとこれもダメだよ.
No.5
- 回答日時:
配列要素のアクセス
a[3]
は立派なポインタを使ったアクセスだけど
分かってます?
Cだと配列出てきたらポインタは避けられない、
というか、ポインタと配列の区別は殆ど無い。
また、ポインタが陽に出てこないpythonのような
言語でも間接参照の概念は有用です。
#pythonのような言語では、実は変数はほぼ全部ポインタだったりします。
No.6ベストアンサー
- 回答日時:
要するに、実際には使われているかどうかは置いといて、
「*」と「&」を使わずに書けるかという話でしょうか?
少なくとも、宣言に「*」を書かない場合は、出来ることはかなり限られるんじゃないかなと思います。
ポインタを引数にする標準関数やシステムコールは、書き方をかなり工夫しないといけないっぽいです。
意外なことに、scanf()も書けますね、配列の宣言の仕方は置いといたとして。
#include <stdio.h>
main()
{
int a[1];
scanf("%d", a);
printf("%d\n", a[0]);
}
ちなみに、上記だと、scanf()のすべての引数とprintf()の第1引数はすべてポインタ、
printf()の第2引数はポインタから値を取っています。
>メモリの参照の仕方が違うだけな気がします。
メモリの参照の仕方が違うのではなく、ソースコード上の表記が違うだけです。
たとえば、次の2つのプログラムは、まったく同じアセンブリコードが生成されます
プログラム1:
main()
{
char a[10];
a[1] = 1;
}
プログラム2:
main()
{
char a[10];
*(a + 1) = 1;
}
お探しの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言語を独学で勉強しているのですがいまいちわかりません。 https://monozukuri- 3 2023/07/06 18:59
- C言語・C++・C# 関数ポインタの高速化のメリット 7 2023/05/05 20:15
- IT・エンジニアリング c言語とjavaの需要について 3 2022/06/23 22:59
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- その他(言語学・言語) ピダハン語 2 2022/07/14 12:41
- C言語・C++・C# プログラミング言語「C#」の難易度ってどれくらいですか? 4 2022/05/12 19:15
- 数学 C言語と将来性 7 2022/10/13 16:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
セグメントエラー
-
VC++6.0 MFC ダイアログバーを...
-
Run-Time Check Failure #3とい...
-
構造体とfscanf
-
基本アルゴリズムの『返す』の...
-
x64プログラムでアドレスが32bi...
-
LPSTR型の初期化について
-
Cで作成したDLL関数をVBから呼...
-
C言語: ポインタ
-
fopne で失敗する原因
-
visual studioのエラーについて
-
popenした子プロセスのプロセス...
-
C++で関数ポインタから関数名を...
-
printfとscanfの違いって・・・
-
ExcelVBAでのkernel32(64bit)
-
PASCALとFARの意味
-
VB.NET DLL【API関数(コールバ...
-
C言語のポインタに直接アドレス...
-
参照型で受け取った引数をポイ...
-
お絵かきソフトにUNDO、REDOを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
セグメントエラー
-
C言語のポインタに直接アドレス...
-
init関数の意味
-
戻り値で構造体を返すことは可...
-
fopne で失敗する原因
-
C言語の関数と配列に関する質問
-
Run-Time Check Failure #3とい...
-
LPSTR型の初期化について
-
ExcelVBAでのkernel32(64bit)
-
main(int argc,char **argv[])...
-
アプリを32bitから64bit移行
-
ハンドルはポインタか
-
連結リスト 要素の入れ替え
-
C言語でのconstを返す関数
-
Cで作成したDLL関数をVBから呼...
-
NULLとブランクの違い
-
エラーの意味
-
ハンドル、アドレス、ポインタ...
-
DLL<->VB間での受け渡し(文字...
-
【C言語】戻り値が構造体の関数
おすすめ情報