指针初始化

指针初始化引用: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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JMH是什么?

    JMH是什么?一、JMH是什么?JMH是Java性能测试工具,主要是对工程中一些方法进行一些基准测试,支持的时间单位为:nano/micro/milli/macro二、JMH使用案例-代码:1P

    2022年7月4日
    23
  • glPushMatrix 与 glPopMatrix[通俗易懂]

    glPushMatrix 与 glPopMatrix[通俗易懂]1.原理讲解 终于明白为什么使用glPushMatrix()和glPopMatrix()的原因了。将本次需要执行的缩放、平移等操作放在glPushMatrix和glPopMatrix之间。glPushMatrix()和glPopMatrix()的配对使用可以消除上一次的变换对本次变换的影响。使本次变换是以世界坐标系的原点为参考点进行。下面对上述结论做进一步的解释:1)OpenGL中

    2025年7月7日
    3
  • springBoot笔记(一)「建议收藏」

    springBoot笔记(一)「建议收藏」1、直接在application.properties中写端口 server.port=8081server.servlet.context-path=/luck2、在resources包下创建application.yml 将配置文件写在里面 server: port: 8082 servlet: context-path: /lu…

    2022年6月13日
    31
  • spss交叉表分析 + SPSS卡方检验

    spss交叉表分析 + SPSS卡方检验spss中交叉分析主要用来检验两个变量之间是否存在关系,或者说是否独立,其零假设为两个变量之间没有关系。在实际工作中,经常用交叉表来分析比例是否相等。例如分析不同的性别对不同的报纸的选择有什么不同。spss交叉表分析方法与步骤: 1、在spss中打开数据,然后依次打开:analyze–descriptive–crosstabs,打开交叉表对话框 2、将性别放到行列表,将

    2022年5月16日
    207
  • java数据库查询类建议收藏

    通用查询数据库辅助类,可实现任意查询语句的查询,还可以进行多结果集查询。类的代码:1packagecom.hongyuan.db;23importjava.math.BigDecimal

    2021年12月20日
    48
  • 手机看Typora笔记[通俗易懂]

    接触Typora之后感觉还挺好用的,不用上网,不用花钱(白嫖的玩意就是香)。可以写普通的文本,可以添加五个等级的标题,可以插入图片,,还可以插入各种各样的代码块(java,c,html,css等等),简洁而强大。但是当初我以为只能在电脑上看的时候就觉得有点难受,玛德是我S13了,我还去网上搜了半天,看看有没有教程或者手机版的软件,有的还要付费,今天我恍然大悟,尼玛人家开发个软件怎么可能没想到这些东西呢,我真是S13卧槽。看图啥都懂了:别被坑钱和C币吧…

    2022年4月3日
    203

发表回复

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

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