ここから本文です

ポインタについて C言語のポインタについて質問です。 よくプログラミング中の...

tob********さん

2013/12/2103:05:58

ポインタについて

C言語のポインタについて質問です。
よくプログラミング中の演算で
*p - '0' (*pはポインタ)
という表現を見ますが、-'0'は何を意味してるのでしょうか

閲覧数:
238
回答数:
5

違反報告

ベストアンサーに選ばれた回答

pyo********さん

2013/12/2104:33:59

たぶん、0~9の数字を数値に変換する。
'0'~'9'は文字コードはこの順に連続していることが
規格で保証されているので、'0'を引けば数字を数値に変換できる。

この回答は投票によってベストアンサーに選ばれました!

ベストアンサー以外の回答

1〜4件/4件中

並び替え:回答日時の
新しい順
|古い順

apr********さん

2013/12/2118:26:15

/*
2013/12/21 03:05:58
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>

int main(){
_char__dgt[]={"1234567890"};
_char__*p,*q;
_int__ num=0;
_
_printf("asciiコードを利用した文字列→整数変換\n");
_for(p=dgt;*p;p++){
__num = 10*num+(*p-'0');
__printf("'%c' %d %d %d\n",*p,*p,*p-'0',num);
_}
_printf("標準関数による文字列→整数変換\n");
_printf("atoi(\"%s\")=%d\n",dgt,atoi(dgt));
_printf("atol(\"%s\")=%d\n",dgt,atol(dgt));
_printf("strtol(\"%s\",&q,10)=%d\n",dgt,strtol(dgt,&q,10));
_
_return 0;
}
/* 実行出力:画面
asciiコードを利用した文字列→整数変換
'1' 49 1 1
'2' 50 2 12
'3' 51 3 123
'4' 52 4 1234
'5' 53 5 12345
'6' 54 6 123456
'7' 55 7 1234567
'8' 56 8 12345678
'9' 57 9 123456789
'0' 48 0 1234567890
標準関数による文字列→整数変換
atoi("1234567890")=1234567890
atol("1234567890")=1234567890
strtol("1234567890",&q,10)=1234567890
*/

arborさん

2013/12/2111:57:44

言葉通りに解釈するのであれば...

> *pはポインタ

とのことですので、たとえば次のような宣言なのでしょうか?

char **p;

ということは、*p - '0' はポインタから整数値を引き算していることになります。
'0'の値は処理系定義ですが、多くの場合はASCIIやUTF-8またはその互換ですので、0x30になっているかと思います。
つまり、こういうことです。

char array[0x100];
char *s = &array[0x30];
char **p = &s;

のような場合に、*p - '0'は &array[0] と同じ値に評価されることになるでしょう。

tar********さん

2013/12/2111:03:53

数字 '0'~'9'は
16進数では 30H~39H
10進数では 48~57

*p に '0'~'9' のいずれかが入っていると期待すれば
*p - '0' によって*pに入っている値から30Hを引き算することを意味する。

もし,*pに'5'が入っていたとすれば 35H - 30H = 05H という結果が得られる
もし,*pに'A'が入っていたとすれば 41H - 30H = 11H という結果が得られる

ことを意味する。

多くの場合、数字='0'~'9'を数値=0~9に変換するために用いる手法。

2013/12/2108:57:53

*pでポインタが指すデータにアクセスすることになるのでポインタの話はそれでおしまい。
'0'は、文字0の文字コード。
数字は0~9まで文字コードが連続して増加していることがCの規格で保証されているので、
pがcharへのポインタであれば、
*p-'0'は pが指している数字(文字)0~9を数値0~9に変換する式、ということになる。
文字コードって何、という話は大丈夫かしら? http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1374614063 あたり参考になるかな。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる