質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

2714閲覧

memsetの第2引数はなぜintなのですか?

退会済みユーザー

退会済みユーザー

総合スコア0

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

1グッド

1クリップ

投稿2021/10/25 06:49

あるサイトのソースコードを見ると、結局は内部でunsigned charにキャストされて代入されているようですが、なぜintなのでしょうか?
あと第1引数がvoid*なのは、使用する側がいちいちキャストせずにアドレスを渡せるようにでしょうか?

第1,2ともにunsigned charでよかったのではと思って質問しました。

ozwk👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

投稿2021/10/25 07:34

ozwk

総合スコア13532

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yumetodo

2021/10/27 14:34

要約: そもそもCにおいて'a'はchar型ではなくint型である
退会済みユーザー

退会済みユーザー

2021/10/28 04:30

文字列リテラルと違って、文字リテラルはint扱いみたいですね ありがとうございました
guest

0

あるサイトのソースコードを見ると、結局は内部でunsigned charにキャストされて代入されているようですが、

キャストされているのは第1引数で
void *unsigned char * にキャストしているのではありませんか?
void * のままだと、第2引数の値をセットできませんから。

なぜintなのでしょうか?

引数の受け渡しには、スタックかレジスタを使いますが、
int が CPU にとって扱いやすいサイズだったからだと思います。
char *strchr(const char *s, int c, size_t n) も第2引数は int です。

<ctype.h> の int isdigit(int c) が文字の判別なのに引数が int なのは、
unsigned char の文字と EOF を渡したいからです。

あと第1引数がvoid*なのは、使用する側がいちいちキャストせずにアドレスを渡せるようにでしょうか?

そうです。

第1,2ともにunsigned charでよかったのではと思って質問しました。

第1引数が unsigned char だったら、アドレスを渡せません。

投稿2021/10/28 03:05

kazuma-s

総合スコア8224

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

どうでもいいからじゃないですか?

投稿2021/10/25 10:18

qqfsdfsafd

総合スコア599

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

あと第1引数がvoid*なのは、使用する側がいちいちキャストせずにアドレスを渡せるようにでしょうか?

そのとおりです。むしろ、ポインタ引数を「unsigned charでよかった」と考えるほうが理解できません。

投稿2021/10/25 07:19

maisumakun

総合スコア145208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2021/10/25 07:22

C言語の歴史的経緯(ポインタ幅変数しかなかった、祖先のB言語からの系譜など)もあって、printfのような可変長引数に渡す場合にint未満はintへ変換される(プロトタイプ宣言のなかった頃は、ふつうの引数でもそうなっていた)など、「とりあえずint」となっているような場面も多いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問