C语言学习--指针--指针的大小,野指针,空指针, 泛型指针

指针的大小与类型没有关系, 都是四字节。

int *p :int * 表示指针类型, 这是一个int 类型的指针

chr *p: chr * 表示是字符类型的指针

#include<stdio.h>

int main (void)
{


    printf("int * %d \n" , sizeof(int *));
    printf("float * %d \n", sizeof(float *));
    printf("double * %d \n", sizeof(double *));
    printf("long * %d \n", sizeof(long *));
    printf("char * %d \n", sizeof(char *));
    printf("long long * %d \n", sizeof(long long *));

}

int * 8
float * 8
double * 8
long * 8
char * 8
long long * 8

野指针: 

#include<stdio.h>

int main (void)
{


    // 野指针

    int *p ; //只声明, 但是没有定义, 编译器自动赋值随机数

    *p = 200;

    printf("the *p is %d", *p);


}

这样是不行的, 指针p 所指向的地址是随机数, 没办法给其赋值200
#include<stdio.h>

int main (void)
{


    // 野指针

   int *p = 10; // 0 -255 是操作系统所用的内存地址, 不行使用的。

   *p = 350;

   printf("*p value is %d", *p);


}

指针地址是不能使用的, 所以这样也是不行的

综上, 杜绝使用野指针

#include<stdio.h>

int main (void)
{


    // 空指针

   int *p = NULL;  // NULL == 0

   if (p != NULL)
   {
       *p = 300;
   }


   printf("*p value is %d", *p);


}

 

 

泛型指针

#include<stdio.h>

int main (void)
{


    void *p;
    int a = 10;

    p = &a;

    printf ("* p is %d", *(int*)p);  // (int*)  强制类型转换成int* 型指针,(括号表示的是强制类型转换 )


}


* p is 10

 

posted @ 2022-10-23 21:26  朵朵奇fa  阅读(122)  评论(0编辑  收藏  举报