私が取り組んでいる現在のプロジェクトで誰かが私を助けてくれれば、この概念をよりよく理解できると思います。C を使用して、ポインタを使用して特定のメモリ アドレスのデータを編集したいと考えています。具体的には、特定の場所からデータを読み取り、特定の場所に書き込む必要がある 2 つの文字配列 (文字列) があります。
*
and->
やなどのポインターの構文については、ほとんど混乱しています&
。
私の理解で*
は、ポインタの現在のメモリアドレスに保持されているデータを指します。したがって、たとえば、 a の先頭メモリ アドレスにあるデータを編集したい場合は、次のchar *p
ようにします。 (*p) = 'c';
では、先頭から2 番目のメモリ アドレスの文字を変更したい場合はどうすればよいp
でしょうか。
&
また、ポインターの位置を指すことも理解しています。しかし、この構文の使い方がわかりません。
これが私の例です:
int orig_length = strlen(original_string); //-1 for \0?
char *poriginal, *pnew_string;
poriginal = &original_string;
while(orig_length>0) {
k = 0;
j = 0;
while(isalpha(*(poriginal+j))) {
j++;
k++;
}
while(k > 0) {
*(pnew_string+(j-k)) = toupper(*(poriginal+k-1)); //toupper
k--;
}
if(*(poriginal+(j)) == '_') {
*(pnew_string+(j)) = ' ';
}
else {
*(pnew_string+(j)) = *(poriginal+(j));
}
orig_length = orig_length - j;
}
*(pnew_string+strlen(pnew_string)) = '\0'; //Syn? Is this actually necessary?
... //program continues...
ちなみに、このプログラムは「now_i_understand!」という文字列を 1 つ受け取ることを意図しています。各単語を反転し、各単語を大文字にし、_ を ' ' に切り替え、他の句読点はそのままにしておきます: "WON I DNATSREDNU!"