指针初始化

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

相关推荐

  • python fillna函数_python中dropna函数

    python fillna函数_python中dropna函数我正在尝试在datetime64[ns]类型的列上运行fillna.当我运行类似的东西:DF[‘日期’].fillna(日期时间(“2000-01-01”))我明白了:TypeError:需要一个整数有什么方法吗?这应该在0.12和0.13(刚刚发布)中工作.@DSM指出日期时间的构造如下:datetime.datetime(2012,1,1)所以错误是由于未能构建您传递给fillna的值…

    2022年8月12日
  • 图解转置卷积原理[通俗易懂]

    图解转置卷积原理[通俗易懂]声明:本文大部分搬运自【机器学习】详解转置卷积(TransposeConvolution)感谢博主花与人间事同,本人只是在博主原创文章上做补充以及添加一些自己的理解。1转置卷积的背景通常,对图像进行多次卷积运算后,特征图的尺寸会不断缩小。而对于某些特定任务(如图像分割和图像生成等),需将图像恢复到原尺寸再操作。这个将图像由小分辨率映射到大分辨率的尺寸恢复操作,称为上采样(Upsample),如下图所示:上采样方法有很多,详见【图像处理】详解最近邻插值、线性插值、双线性插值、双三次插值

    2022年6月21日
  • Python简介 「建议收藏」

    Python简介 「建议收藏」1,Python是一种计算机程序设计语言,Python是用来编写应用程序的高级编程语言。完成同一个任务,Python的代码量很少,但是代码少的代价是运行速度慢。2,问题:是不是越低级的程序越难学,

    2022年7月3日
  • 必须了解的MySQL三种日志

    必须了解的MySQL三种日志

    2022年2月18日
  • JavaScript 数组排序

    JavaScript 数组排序JavaScript数组排序1、reverse方法2、sort方法1、reverse方法reverse方法会将数组内的元素反序排序。如:letarr=[1,2,3,4,5,6];arr.reverse();//arr=[6,5,4,3,2,1]2、sort方法sort方法默认会将元素当成字符串相互对比,也可以传入自己写的比较函数来决定排序顺序。如:letarr=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19

    2022年6月14日
  • 常用字典_古汉语常用字典

    常用字典_古汉语常用字典huangyu888!@#$zhoujiakui223223jtserver1981@223wztelecom2008easygetyzdx123echina0228xiaxue123-$$4rf7uj3ed8ik!!changeme$$ebochai517qifengjc09001.1qa2ws3edwzcgame12wanzhonggamewanzhonggame…

    2022年11月2日

发表回复

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

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