指针初始化

指针初始化引用: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)
上一篇 2022年7月3日 上午9:16
下一篇 2022年7月3日 上午9:16


相关推荐

  • 字符串匹配之KMP—全力解析

    字符串匹配之KMP—全力解析

    2021年11月29日
    43
  • VUE 关闭eslint严格模式

    VUE 关闭eslint严格模式TOC VUE 关闭 eslint 严格模式 VUE 关闭 eslint 严格模式如果在使用 vue cli 搭建 vue 工程时 不小心选择了 eslint 严格校验模式 对于开发人员调试代码是很麻烦的事 那么如何关掉 eslint 严格模式呢 1 在 package json 文件下找到 eslint 配置 eslintConfig root true env node true extends plugin vu

    2026年3月17日
    1
  • MyBatis原理分析之六:RowBounds分页原理

    MyBatis原理分析之六:RowBounds分页原理Mybatis 可以通过传递 RowBounds 对象 来进行数据库数据的分页操作 然而遗憾的是 该分页操作是对 ResultSet 结果集进行分页 也就是人们常说的逻辑分页 而非物理分页 RowBo

    2026年3月18日
    3
  • ibatis中isnotnull和isnotempty的区别_typedef int Status

    ibatis中isnotnull和isnotempty的区别_typedef int StatusisPropertyAvailable和isNotEmpty这个两个属性非常有用isPropertyAvailable:入参有这个属性isNotEmpty:入参的这个属性不为空入参一般是一个封装了数据的DTO如果希望一个属性无论为何值都符合条件则使用isPropertyAvailable如果希望一个属性只是不为空的时候才符合条件就用isNotEmptyupdate例子如下:…

    2022年10月7日
    7
  • linux centos7配置网络教程,linux centos7配置网络「建议收藏」

    linux centos7配置网络教程,linux centos7配置网络「建议收藏」1.动态获取ip(前提是你的路由器已经开启了DHCP)修改网卡配置文件vi/etc/sysconfig/network-scripts/ifcfg-ens32(最后一个为网卡名称)动态获取IP地址需要修改两处地方即可(1)bootproto=dhcp(2)onboot=yes修改后重启一下网络服务即可systemctlrestartnetwork2、配置静态IP地址设置静态IP地…

    2022年5月8日
    48
  • 程序员工资统计_中国程序员工资

    程序员工资统计_中国程序员工资此调查,是对北京、上海、广东和浙江等全国29个省、直辖市及特别行政区的26W+优秀程序员进行了一次详细的调查,形成本报告。根据中国互联网络信息中心(CNNIC)近日发布第43次《中国互联网络发展状况统计报告》。截至2018年12月,中国网民规模为8.29亿,全年新增网民5653万。网上外卖用户规模达4.06亿,同比增长18.2%;网络视频用户规模达6.1…

    2022年10月11日
    9

发表回复

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

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