いつも私を混乱させていたのは、文字ポインターです。私が再びcに長居しているのは、長い4年後のことです。
前述のケースを例にとります。なぜchar
ポインタはこのように動作するのですか? ポインティが何も指していない場合、または char ポインタがアドレス以外のものを格納しているようなものである場合、ポインティの内容を直接アドレス指定するにはどうすればよいでしょうか。
#include <stdio.h>
#include <stdlib.h>
int main()
{
char* charPtr="I cant understand why";
int* intPtr=60;
printf("%d\n", intPtr); //displays 60
printf("%p\n", intPtr); // displays the hex value of 60
printf("%s\n", charPtr); // displays the wh0le string
printf("%p\n", charPtr); // displays the start address of the string
return 0;
}
次のint
ポインタは、どのように値 60 を受け入れ、どこに格納されますか?
char ポインターと malloc は別として、ポインターの基本的な考え方は、指すアドレスを取得することだと思いました。
なぜこれらのケースは
*intptr = 60 ; // should be setting the pointee's value to 60
intptr = 60 ; // sets the address
コンパイルエラーをスローする
int* intPtr=60;
ポインティのアドレスを取得せずに忍び込んだ(またはアドレスとして60が使用されている場合、前者の場合ではこれが受け入れられないのはなぜですか)!
ここで何かが足りないと思いますが、ちょっと!何だと思う ?SOで検索するように言われました!
編集: char ポインターが指すアドレスを int ポインターに指定しても、エラーは発生しません。
int8_t* intPtr= (int8_t*)0x80485c8 ; // works without casting too ! I guess addresses are acceptable.
それを逆参照すると、文字列の最初のものと同等の値が得られI
ます.これは良い習慣ですか、それともintがcharを保持できるなどのバイトビットサイズの割り当てを除外する他の説明があります..?
hmjd が指摘したように、「初期化構文」が問題です! 自分のコードを書くのは問題ありませんが、誰かのコードを変更すると問題が発生します。