指针初始化

指针初始化引用:https://blog.csdn.net/qq_43574794/article/details/84864349https://baike.baidu.com/item/%E6%8C%8

大家好,又见面了,我是你们的朋友全栈君。

引用:
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所指向的那块内存空间。编译结果如下:
<span role="heading" aria-level="2">指针初始化
a未初始化,到底指向哪里根本我们不得而知。所以我们在进行赋值操作的时候可能有下面几种情况:
1.a的初始值是一个非法地址,赋值语句出错,程序终止。它提示程序访问的是一个并未分配给程序的内存位置。
2.可能指针包含一个合法化的地址,而赋值语句更改了它。

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

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

#include<stdio.h>
#include<stdlib.h>

int main()
{
	int* a = NULL;
	*a = 1;
	system("pause");
	return 0;
}

编译结果也是有问题的:
<span role="heading" aria-level="2">指针初始化
这是因为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;
}

运行结束:
<span role="heading" aria-level="2">指针初始化

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/155800.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • ice服务器框架压力测试数据「建议收藏」

    ice服务器框架压力测试数据「建议收藏」ice服务器框架压力测试数据标签: 服务器测试框架socket工作linux2011-07-1215:50 3819人阅读 评论(5) 收藏 举报 分类: ice(3) 版权声明:本文为博主原创文章,未经博主允许不得转载。有段时间为公司做了一些技术收集方面的工作,ice作为一个开源的网络通讯中间件,肯定是我们不错的研究对象。

    2022年6月7日
    99
  • linux常用命令杀死进程_kill杀死进程命令

    linux常用命令杀死进程_kill杀死进程命令在做项目的时候经常会出现程序死机、锁死、无响应等情况,这时候就需要找到程序相应的进程将其杀掉即可。步骤如下:1.定位进程top命令:可以实时动态地查看系统的整体运行情况,是一个综合了多方信息监测系统性能和运行信息的实用工具。通过top命令所提供的互动式界面,用热键可以管理。输入top后可以看到如下的界面,实时显示进程情况。ps命令:processstatus的简称,用于报告当…

    2022年4月19日
    237
  • 微信中调用扫一扫最简便的方法 5行代码实现H5扫一扫 HTML5扫二维码最简便的办法

    微信中调用扫一扫最简便的方法 5行代码实现H5扫一扫 HTML5扫二维码最简便的办法调用方式1(推荐。用redirect_uri参数指定接收结果的页面,可以是自身url):<ahref=”https://www.996315.com/api/scan/?redirect_uri=你的网页完整url”>扫描</a>调用方式2(不推荐):<ahref=”https://www.996315.com/api/scan/”>扫描</a>调用方式3(用js调用。本质和方式1、2一样):<ahref=”javascr

    2022年5月18日
    50
  • 什么是android原生系统版本,定制安卓和原生Android到底有哪些不同之处?彻底真相了…

    什么是android原生系统版本,定制安卓和原生Android到底有哪些不同之处?彻底真相了…相信大家都知道最近在搞机圈有个大新闻,就是小米即将于8月份推出MIUI9。近日小米MIUI市场副总监@黄龙中就在微博上征求米粉意见,暗示MIUI9可能长下面这样。小米最新官方主题《几何》,浓浓flyme风自2010年MIUI横空出世,国产定制安卓ROM在国内掀起了一阵风暴。MIUI成功后,乐蛙、点心等三方定制ROM迅速崛起,但随着手机系统生态逐渐稳定、刷机需求降低,定制安卓系统的范围逐渐缩小…

    2022年6月19日
    50
  • SpringBoot跨域配置「建议收藏」

    SpringBoot跨域配置「建议收藏」什么是跨域简单而言,跨域请求就是当一台服务器资源从另一台服务器(不同的域名或者端口)请求一个资源或者接口,就会发起一个跨域HTTP请求。举个简单的例子,从http://www.baidu.com,发送一个Ajax请求,请求地址是http://www.taobao.com下面的一个接口,这就是发起了一个跨域请求,在不做任何处理的情况下,显然当前跨域请求是无法被成功请求,因为浏览器基于同源策略会对跨域请求做一定的限制。产生跨域问题的条件例如:http://192.168.38.438:808

    2022年6月25日
    39
  • js实现模糊查询

    js实现模糊查询1、简述实现模糊查询方法有很多种,后端可以实现,前端使用js也可以实现。后端实现起来需要根据输入框中搜索的关键字,去后台拼接SQL语句查询。前端直接使用字符串的indexOf()方法或者正则表达式匹配实现,相比后端实现这种方法的用户体验更友好。2、demo当输入框中输入内容或者点击查询按钮时,根据输入框中的关键字,模糊查询下面表格的内容,并重新渲染表格。代码如下。(1)…

    2022年5月30日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号