码迷,mamicode.com
首页 > 其他好文 > 详细

指针初始化

时间:2020-02-19 17:26:29      阅读:70      评论:0      收藏:0      [点我收藏+]

标签:net   csdn   赋值   href   情况   表示   main   赋值语句   pause   

引用:
https://blog.csdn.net/qq_43574794/article/details/84864349
https://baike.baidu.com/item/%E6%8C%87%E9%92%88%E5%88%9D%E5%A7%8B%E5%8C%96/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位指针所指类型字节即移动415字节)a的地址是10,c的地址是10+ 415,因为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", n);
    system("pause");
    return 0;
}

运行结束:
技术图片

指针初始化

标签:net   csdn   赋值   href   情况   表示   main   赋值语句   pause   

原文地址:https://www.cnblogs.com/xym4869/p/12331825.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!