C言語の初期化されていないポインタとnullポインタについて

ポインタpは、正常に実行できるように同時に定義および初期化されるため、コードは次のとおりです。

#include <stdio.h>
int main()
{
    
    
    int a;
    int *p=&a;
    scanf("%d",p);
    printf("%d",*p);
    return 0;
}

ポインタはnullに初期化されており、現時点では正常に実行できません。コードは次のとおりです。

#include <stdio.h>
int main()
{
    
    
    int *p=NULL;
    scanf("%d",p);
    printf("%d",*p);
    return 0;
}

nullポインタも使えないようです。

20200505の新機能
ポインタと動的メモリ割り当てに関するいくつかの考え
1.メモリ内の変数が占めるストレージスペースの最初のアドレスは変数のアドレスと呼ばれ、変数のストレージスペースに格納されたデータは次の値になります。変数。(この文を注意深く読む前に。ポインタ変数pに格納されているアドレスはすべて空ですが、どうすれば* pに値を割り当てることができますか?スキンには愛着の感覚がありません)
2。関数malloc() :数バイトのメモリ空間を割り当て、メモリの最初のアドレスへのポインタを返すために使用されます。システムが十分なメモリスペースを提供できない場合、関数はnullポインタNULL
3を返します。メモリを解放した後もメモリを使用し続けます。メモリ
が解放されても引き続き使用する場合は、ワイルドポインタになります。
ポインタが指すスタックメモリ空間が解放されても、それを指すポインタは消滅しません。メモリが解放された後、ポインタの値は実際には変化しません。それでもこのメモリを指しますが、データはメモリはランダムな値(文字化け)のみになります。メモリを解放した結果、メモリに格納されているデータのみが変更され、メモリに格納されているコンテンツがホットチキンになります。ガベージメモリへのポインタはワイルドポインタと呼ばれます。
メモリが解放された後、そのメモリへのポインタが自動的にnullポインタになることはなく、ワイルドポインタはnullポインタではありません

おすすめ

転載: blog.csdn.net/weixin_43919570/article/details/105555298