友人がこのコードを手伝ってくれましたが、どのように機能するのかわかりません。5行目は(* pp-97)* 4で、基本的にはchar 110のサイズなので(110-97)* 4またはスキャンしたppの値?ありがとう
char *pp =(char*)malloc(110);
printf("Enter text: ");
scanf("%s", pp);
*pp = *(pp + n);
int f = (*pp - 97)*4;
*ppと同等pp[0]であり、通常*(pp + n)はと同等でpp[n]あることに注意してください。
*pp = *(pp + n);
atオフセットを最初のオフセット0にpp[0] = pp[n];コピーすると書くこともできます。charnchar
int f = (*pp - 97)*4;
そしてこれは書くことができます
int f = (pp[0] - 97)*4;
したがって、97(のASCII値)がブロックポイント'a'の最初から減算され、その差に4が乗算されます。charpp
これはかなり奇妙なスニペットです。
この行は基本的にサイズ110の文字列を宣言します。
char *pp =(char*)malloc(110);
これらの2行は、ユーザーからの入力を取得します。
printf("Enter text: ");
scanf("%s", pp);
今、これは物事が奇妙になり始めるところです。
*pp = *(pp + n);
上記の行は、この文字列の最初の文字を文字列のn番目の文字に変更します。
int f = (*pp - 97)*4;
今この行の観点から。ここでは、ポインタppを逆参照しています。このポインタを逆参照すると、ppが指しているのは最初の文字になります。この文字の値は整数(ASCII表現)に変換され、97(のASCII値a)を減算してから4を掛けます。
char *pp = malloc(110);
printf("Enter text: ");
scanf("%s", pp);
pp[0] = pp[n];
int f = (pp[0] - 'a')*4;
Cでは、配列演算子はポインターの逆参照と同じです。正しい表記を使用することで、コードの混乱が少なくなります(imo)。
*(p + i)は同義語であるp[i] ため、*ppと同じ*(pp + 0)です。pp[0]