-1

友人がこのコードを手伝ってくれましたが、どのように機能するのかわかりません。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;
4

3 に答える 3

2

*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

于 2012-11-22T15:44:16.487 に答える
0

これはかなり奇妙なスニペットです。

この行は基本的にサイズ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を掛けます。

于 2012-11-22T15:46:48.813 に答える
0
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]

于 2012-11-22T15:47:10.420 に答える