• 指针初始化


    引用:
    https://blog.csdn.net/qq_43574794/article/details/84864349
    https://baike.baidu.com/item/指针初始化/3527092#1

    int i=10;
    int * a = &i;

    int * a = NULL;(编译没问题,运行错误,指针所指向地址必须为合法有效的内存地址)

    a = (int *)malloc(sizeof(int));
    a[0] = 1;

    int * a =10;(错误写法,给指针赋值必须为地址,*p为所指向变量的值)

    int *a=&i;
    int * c = a + 15;(a代表数组首地址,右侧表达式表示地址向高位移动15位指针所指类型字节即移动4*15字节)a的地址是10,c的地址是10+4*15,因为a的类型是int *,地址增长时加整型的长度。


    代码1:

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
    	int* a;
    	*a = 1;
    	system("pause");
    	return 0;
    }
    

    我在这里声明创建了一个名为a的指针变量,然后把1赋值给a所指向的那块内存空间。编译结果如下:

    a未初始化,到底指向哪里根本我们不得而知。所以我们在进行赋值操作的时候可能有下面几种情况:
    1.a的初始值是一个非法地址,赋值语句出错,程序终止。它提示程序访问的是一个并未分配给程序的内存位置。
    2.可能指针包含一个合法化的地址,而赋值语句更改了它。

    所以在使用指针的时候一定要确保指针已经初始化了。

    当我们不知道给指针变量初始化什么的时候我们一般初始化为NULL:

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
    	int* a = NULL;
    	*a = 1;
    	system("pause");
    	return 0;
    }
    

    编译结果也是有问题的:

    这是因为NULL指针是一个特殊的指针变量,不指向任何内存,用来表示这个指针目前未指向任何位置。
    所以对NULL指针进行解引用操作是非法的。
    对指针进行解引用之前,要确定它不是NULL指针

    #include<stdio.h>
    #include<stdlib.h>
    
    int main()
    {
    	int n = 0;
    	int* a = NULL;
    	a = &n;
    	*a = 1;
    	printf("%d
    ", n);
    	system("pause");
    	return 0;
    }
    

    运行结束:

  • 相关阅读:
    洛谷P2640 神秘磁石(欧拉筛法)
    并查集
    高精度算法
    手写堆
    对拍的使用
    unity4.6学习Ugui中文文档-------参考-UGUI Rect Transform
    使用c#访问脚本里变量的方法
    Unity3d 脚本相互调用
    set_union的几个例子[转]
    C++ 关键字——friend
  • 原文地址:https://www.cnblogs.com/xym4869/p/12331825.html
Copyright © 2020-2023  润新知