指针初始化

指针初始化引用: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">指针初始化

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • intellijidea2021最新激活码_最新在线免费激活

    (intellijidea2021最新激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html…

  • 流控制、FlowControl

    流控制、FlowControl  这个选项基本上所有网卡都会有,但是叫法会有些差别,比如Realtek网卡叫做流控制,Intel网卡叫做流程控制,还有一些网卡选项干脆是英文的,叫做FlowControl,很多交换机上也有这个功能,也叫做FlowControl。  网卡自身支持的流控制和我们所说的Qos不一样,虽然目的可能是一样的。作用就是防止网络拥堵时导致的“丢包”问题,大致的工作原理就是当链路两端的设备有一端忙不过来了,…

  • mysql函数索引_MySQL 函数索引 (Functional indexes)

    mysql函数索引_MySQL 函数索引 (Functional indexes)函数索引示例:CREATETABLEt1(col1INT,col2INT,INDEXfunc_index((ABS(col1))));CREATEINDEXidx1ONt1((col1+col2));CREATEINDEXidx2ONt1((col1+col2),(col1-col2),col1);ALTERTABLEt1ADDINDE…

  • 微信小程序与php后端交互_微信小程序数据库放哪

    微信小程序与php后端交互_微信小程序数据库放哪这里简单介绍用php后台实现获取openid并保存到数据库;微信的登陆流程是这样的首先前端发送请求到服务器:wx.login({success:function(res){varcode=res.code;//发送给服务器的codewx.getUserInfo({success:function(res){varuserNick=res.userInfo.nickName;…

  • SSM-Mybatis(3)[通俗易懂]

    SSM-Mybatis(3)[通俗易懂]复杂的sql查询环境搭建CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO teacher(id, name) VALUES (1,’秦老师’); CREATE TABLE `student` ( `id` INT(10) NOT NULL

  • rider 2022 激活-激活码分享2022.01.27

    (rider 2022 激活)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~1TCF…

发表回复

您的电子邮箱地址不会被公开。

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