-
指针的初始化
2014-07-22 11:50:25对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。 1、指针的初始化 指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不...指针代表的是内存单元的编号或地址,通过指针就可以找到对应的内存单元。对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。
1、指针的初始化
指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。
对指针进行初始化时常用的有以下几种方式:
1.采用NULL或空指针常量,如:int *p = NULL;或 char *p = 2-2; 或float *p = 0;
2.取一个对象的地址然后赋给一个指针,如:int i = 3; int *ip = &i;
3.将一个指针常量赋给一个指针,如:long *p = (long *)0xfffffff0;
4.将一个T类型数组的名字赋给一个相同类型的指针,如:char ary[100]; char *cp = ary;
5.将一个指针的地址赋给一个指针,如:int i = 3; int *ip = &i;int **pp = &ip;
6.将一个字符串常量赋给一个字符指针,如:char *cp = “abcdefg”;
ANSI C定义了零指针常量的概念:一个具有0值的整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋给任何类型的指针。也就是说,我们可以将0、0L、'/0'、2–2、0*5以及(void *)0赋给一个任何类型的指针,此后这个指针就成为一个空指针,由系统保证空指针不指向任何对象或函数。
ANSI C还定义了一个宏NULL,用来表示空指针常量。大多数C语言的实现中NULL是采用后面这种方式定义的:#define NULL ((void *)0)。
例如:
int a = 25;
int *ptr = &a;
int b[10];
int *point = b;
int *p = &b[0];
2、指针的赋值
int *p;
int a;
int b[1];
p = &a;
p = b;
指针的赋值,“=”的左操作数可以是*p,也可以是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
常见错误:
如果:int *p;
*p = 7;
则编译器(vs2008)会提示The variable 'p' is being used without being initialized.即使用了未初始化的变量p。
因为p是指向7所在的地址,*p = 7给p所指向的内存赋值,p没有赋值,所以p所指向的内存位置是随机的,没有初始化的。
int k;
int *p;
p = &k; //给p赋值
*p = 7; //给p所指向的内存赋值,即k= 7
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
-
对指针变量取地址_C++指针这样理解更易懂
2020-12-10 09:02:51我想在C/C++的学习中,没有比指针更让人难以理解的了吧。接下来小编就将自己在学习C/C++指针时的一些理解给大家分享一下,希望能对大家有帮助。...另一种方式去理解指针我们先来看一下指针变量怎么初始化和赋...我想在C/C++的学习中,没有比指针更让人难以理解的了吧。接下来小编就将自己在学习C/C++指针时的一些理解给大家分享一下,希望能对大家有帮助。
精华写在前头
首先将最主要的两点给大家在这里先将一下。在指针里面有两个符号很重要,一个就是“*”号,一个就是“&”。大家记住这两点就行:变量前加“*”就是取值,变量前加“&”就是取地址。
另一种方式去理解指针
我们先来看一下指针变量怎么初始化和赋值:
不知道有多少小伙伴是这种写法:这种写法我是这样理解的‘int’是类型*p把他整个当成变量所以后面*p = b的写法就跟普通int变量赋值是一样的*p = b其实可以看成类似a=b这种赋值过程
其实我个人不怎么喜欢这种写法,我的写法如下:
大家注意我鼠标选中的那一行,我将int *p 写成了int* p,其实这两种写法用起来是一模一样的,但是我觉得这种写法更容易去理解指针:我将int* 整个当成一个一种类型,就更int、string这种类型是一样的,只不过int* 是指地址類型,而int是整型的变量。现在很好理解了吧。p是一个地址变量,那么初始化我们是不是也应该给他一个地址呢?所以int* p = &a;
然后第13行*p = b ;p是一个地址变量,我前面也讲到过“*”号是取值,就是取p这个地址存的值,p的地址存的值是整型的,b的类型也是整型,符合=号左右两边类型相等原则,可以赋值。运行代码的结果是:
200
二级指针的理解
好,接下来我们呢去复杂情况下运用指针看下我们的理解能不能行的通。好,接下来,更头疼的二级指针来啦!
从第15行看起:我还是用我喜欢的写法去写的。来,我们一起去捋一捋。我又将int** 当成是一个类型(他是“地址的地址”类型),把p2当成是变量。那么第16行,为了让等式左右两边类型相等,p是指向的a的地址对吧,本身p也是一个变量,他本身也有地址,所以将右边也转为int**类型,就是地址的地址类型,怎么做呢?很简单啊,前面讲过啊,“&”代表取地址啊所以p2 = &p;
然后我们看输出项:*p2是什么意思呢?再提一次,前面讲过“*”代表取值,那么*p2代表的意思是取p2指向的地址的值,是什么呢?不就是p的地址吗?
那么**p2呢就很简单了,就是取p的地址指向的值啊。
所以输出结果就是:
其中第一个输出结果由于是地址,地址是系统自动分配的,所以每次运行会不一样!
理解了这些后什么三级、四级也是一样的理解,层层剥开就好了。
图解
给大家一张图,大家去理解吧:
简单讲一下,程序在运行时碰到int* p会给p开辟一个空间,p会拥有自己的内存地址,但是p本身指向的是变量b所在内存的值也就是200,同理运行到int** p2时也会给p2开辟自己的内存地址,但是他指向的是系统分配给变量p的地址~
【总结一句话给大家:指针变量就是自己住着狗窝却去操心别人家的黄金屋(自己占用很小一块内存,却能指挥很大一块内存)】
好啦,就讲这么多,不知道是将各位弄的更糊涂了还是豁然开朗了呢?希望对大家有帮助哦!同时也希望大家能给小编点赞加关注!!!!!小编后续会分享更多自己掌握的知识给大家。
-
段错误 指针初始化
2010-03-23 23:45:00我们知道在定义指针变量的时候,如果没有初始化的话,这个指针变量的值是一个乱七八糟的值,而不是我们有的人想象的null值。...比如我要做一个函数,其中一个参数就是指针,怎么对这个指针是否初始化进行判断呢?我们知道在定义指针变量的时候,如果没有初始化的话,这个指针变量的值是一个乱七八糟的值,而不是我们有的人想象的null值。事实上,要让指针变量成为null,仍需要显式赋值。
因此,从这个角度讲,指针是否初始化就不能直接判断指针变量的值是否为null了。但是既然不能这么判断,那又该怎么判断呢?比如我要做一个函数,其中一个参数就是指针,怎么对这个指针是否初始化进行判断呢?
谢谢1
指针有没有初始化你编写程序的时候还不知道啊?
关于函数参数是指针时, 那么在调用这个函数时, 就有一个实参向形参赋值的过程. 这就是函数参数的初始化呀2
我来告诉你吧,你看一下你的指针定义的地方是不是把它与一个变量的地址相连了啊!!
再就是你想定义指针了,就先想清楚它要指向谁,然后再用,不就避免了它乱指了吗/3
--这是人家面试官问我的问题 :)
--问题在于指针不是写函数的人定义的怎么办?就说如果是多人合作开发的时候,你确实无法保证人家的指针已经初始化了啊?我需要在函数内部进行判断的
比如要实现void memmove(void * Destination,void * Source,site_t n)函数的话,怎么对两个指针参数进行检查呢?谢谢4
无法检查传入的指针是否是指向有效地址的指针.
问题在于指针不是写函数的人定义的怎么办?
-----------------------------
这个就需要一个团队进行一些合作开发的规范.
比如要求定义指针时,必须进行初始化, 不用的指针必须置为NULL等, 就可用是否为NULL来判断指针是否有效了.5
C自它生出来那天~~~就没有这个功能。
from:http://topic.csdn.net/t/20051102/15/4366912.html
-
类的数组成员变量的初始化
2017-10-08 14:51:20类的数组成员变量的初始化 ...这里介绍一下当数组作为类的成员变量时,应该怎么对它(数组)进行初始化。 在类的构造函数中可以使用成员初始化表初始化各个成员变量,这种方法是很受推荐和赞扬的类的数组成员变量的初始化
使用STL标准模板库之后,编程时已经很少使用数组和指针,相反,多使用序列容器vector代替之。
但事实并不这么理想,在迫不得已的情况下,我们还是会选择使用数组。
这里介绍一下当数组作为类的成员变量时,应该怎么对它(数组)进行初始化。
在类的构造函数中可以使用成员初始化表初始化各个成员变量,这种方法是很受推荐和赞扬的,因为使用成员初始化表中对成员进行初始化和在构造函数体中对成员赋值是不同的,特别对于成员对象,在效率上是很有差别的(对于这一点不清楚的朋友们,可以查看C++primer ed3 14.5,这里对此不细讲)。
那么,用惯了成员初始化表的朋友们,因为尝到了其甜头,通常在第一次对待成员数组时,都会选择成员初始化表,而这不但不会给我们带来好处,反而让我们碰了一鼻子灰,并且苦恼。
本文想说的就是:类的成员变量不能使用成员初始化表进行初始化,而只能通过在构造函数体中对数组的各个成员进行赋值。
class bb
{
public:
bb() : a[0](0) {} //出现c2059错误bb(int (&a)[3]) :a[0](a[0]),a[1](a[1]),a[2](a[2]) {}//出现c2059错误
bb(int (&a)[3])
{
this->a ={a[0],a[1],a[2]}; //错误,不能使用初始化表
}//正确写法:
bb()
{
this->a[0]= 0;
this->a[1]= 0;this->a[2] =0;
}
bb(int (&a)[3])
{
this->a[0] =a[0];
this->a[1] =a[1];
this->a[2] =a[2];
}int a[3];
}; -
指针知识(一) 直接引用、指针定义、初始化、运算符
2015-03-29 09:46:17二、指针的定义三、指针的初始化四、指针运算符 直接引用 1. 直接引用意思就是通过变量名直接使用变量数据; char a; a = 10; 2. 看上去是很简单,其实程序内部是怎么操作的呢? 其实,程序对变量的读写... -
怎么定义int_「C语言更新」C语言中如何来定义一个指针,并且对其进行初始化...
2021-01-11 18:42:15文/Edward上一节中,我们利用了一个小知识来介绍了一下指针,在上面这个例子中,小明和小丽手中的这个杯子就好比我们C语言中的变量,它确实是实实在在存放一些有具体意义的数据。这个杯套就类似于C语言中指针的作用... -
c语言 指针
2010-11-22 13:05:00最近看c语言,把以前不怎么懂的指针做个笔记: 声明指针: int *pointer = NULL;... 对已声明的变量地址初始化,使用& ,如 int number = 10; int *pointer = &number; 注意:n... -
c 类的结构体成员一定要初始化吗_学习STM32C语言要达到什么水平?
2021-01-04 04:26:05学到可以看懂标准库(结构体、枚举、宏定义、函数形参为结构体变量的情况该怎么传值)学到可以理解指针是C语言的精髓学到可以理解内存的重要性而要做到这些你只需要看下面的三个视频AV50963968AV50868642AV80340721吹... -
关于const 关键字用于指针的定义,萌新们是怎么理解的呢?
2020-06-06 16:14:30关于const 关键字用于指针的定义,萌...这个语句的意思仅仅是:定义的整型变量 a 是只能在定义的时候被初始化的,在其他地方是不能做左值,也即不能通过这个变量名去修改这个内存空间里的内容的。但是呢,我们如果非要 -
怎么采用数组指针的方式进行数组值之间的传递_Go数组
2020-12-03 08:47:21有时候,我们想在程序中多存储一些数据的内容,用我们前面学的知识知道,我们可以创建多个变量来接收这些数据,然后去对这些数据进行特定的操作。... 需要初始化值的个数(最后面括号中的值1,值2这些) &l... -
MFC 程序运行时出现空指针
2015-12-23 02:17:28MFC程序在启动过程中对一个变量进行初始化,之后放在定时器里运行,第一次执行时正常的,从第二次开始就出现空指针。采用单步调试每次都进入反编译页面,按F5键再次进入定时器变量依然为空指针,请问大家有没有遇到... -
征服指针(C)
2018-01-20 13:00:445.2.7 对指针的恐惧 236 5.2.8 说到底,指针究竟是什么 237 第6章 其他——拾遗 239 6.1 陷阱 239 6.1.1 关于strncpy() 239 6.1.2 如果在早期的C中使用float类型的参数 240 6.1.3 printf()和scanf() 242 ... -
C++的一些学习技巧!
2015-10-21 10:41:10对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。 1、指针的初始化 指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不... -
【面经】关于java对象,一线互联网企业面试题怎么回答
2020-09-04 15:24:543、调用构造方法((1)按照成员变量顺序调用,(2)初始化成员变量,(3)构造方法调用) 双重检查单例,单例要不要加volatile? 对象在内存中的存储布局? 实际和虚拟机的实现有关 假设是hot spot虚拟机 对象头:... -
高质量C++/C编程指南 -- 内存管理之二
2008-11-10 18:12:00内存管理7.5 free和delete把指针怎么啦? [此处原文缺]7.7 杜绝“野指针”“野指针”不是NULL... “野指针”的成因主要有两种:(1)指针变量没有被初始化。任何指针变量刚被创建时不会自动成为NULL指针,它的缺省值是 -
个人对内存中对象中包含对象的理解
2019-03-27 19:49:00我们想要调用手机的充电功能,但是实际上我们调用的是电池充电的功能,但是出现了空指针异常,因为手机类中的电池(这个属性)是成员变量,在测试类new一个手机时初始化默认为null(空的什么都不是,不能调用方法)-... -
挑战程序设计9.2 二叉搜索树——插入中root和NIl的问题
2021-02-25 02:06:49对着书看了很久没看明白下图这一步是怎么将二叉树初始化的 可以看到root和NiL在定义的时候并没有初始化,本菜鸟以为它们应该是指向一个随机地址,但经过调试发现如下结果。 虽然不知道为什么,但是root和nil同样指向... -
4月28日
2017-04-28 19:45:19常量引用:初始化的两种方法:一是用变量初始化(int x=10; const int &y=x;)二是用常量初始(const int &y =10)(int &y = 10编译器不能通过) 内联函数(与define宏函数在参数为++a时区别很明显) 默 -
日常校招面试题演练8-22
2019-08-22 16:17:23问题汇总: (1)C++ vector和list的区别? vector底层是数组,list底层是双向链表 (2)TCP为什么2次握手不行,TCP4次挥手的过程 (3)执行main函数之前和... 在bss段:对未初始化的全局变量进行赋初值,boo... -
opencv svm detector该怎么写?
2019-04-16 11:48:38//处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵 if( 0 == num ) { DescriptorDim = descriptors.size();//HOG描述子的维数 //初始化... -
数据结构-顺序表--刷题记录(1)
2020-12-20 23:28:28故定义一个引用的时候,必须初始化。 其次,引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。说明:虽然引用不可以改变指向,但是可以改变初始化对象的内容。 引用是变量的一个... -
求大神,关于C语言的问题
2017-04-24 10:01:13/* 初始化顺序线性表 */ Status InitList(LinkList *L) { *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */ if(!(*L)) /* 存储分配失败 */ return ERROR; (*L)->next=NULL; /* 指针域... -
面向对象编程--我的虚函数实现方法
2011-08-07 20:05:00如下图所示: 类,即代表类也代表函数表,我们看是怎么调用的. 注意如下规则: 1、每个类的信息都保存在内存里(类型加载后);...2、每个类都会保存其继承的父类或实现的接口的类型指向...并初始化其值,父类的成员... -
c++语言常见面试整理1
2020-12-04 14:42:59故定义一个引用的时候,必须初始化 2) 其次,引用不可以改变指向,对一个对象"至死不渝";但是指针可以改变指向,而指向其它对象。 3) 再次,引用的大小是所指向的变量的大小,因为引用只是一个别名而已;指针是指针... -
你必须知道的495个C语言问题.[美]Steve Summit(带详细书签).pdf 压缩版
2018-04-08 02:26:50能否暂时把整数放入指针变量中,或者相反? 80 *4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 81 第5章 空指针 82 空指针和空指针常量 82 5.1 臭名昭著的空指针到底是什么? 82 5.2 ... -
你必须知道的495个C语言问题.pdf
2013-01-20 14:30:54能否暂时把整数放入指针变量中,或者相反? 4.15 我怎样把一个int变量转换为char *型?我试了类型转换,但是不行。 第5章 空指针 空指针和空指针常量 5.1 臭名昭著的空指针到底是什么? 5.2 怎样在程序里获得一个空...
-
IO系列学习总结三:三张图带你了解NIO通信程序的执行流程
-
基于SSM实现的房屋租赁系统【附源码】(毕设)
-
聊天室工程实践.docx
-
DVPN技术介绍.pdf
-
FFmpeg4.3系列之16:WebRTC之小白入门与视频聊天的实战
-
【Android-Kotlin】减小包体积
-
PC桌面版本的APP网页内容收集分析管理工具
-
Mysql-索引速度验证
-
大数据生态与spark简介
-
用微服务spring cloud架构打造物联网云平台
-
PC桌面端屏幕水印gj
-
Github无法访问解决办法
-
三子棋实现
-
HBase实践
-
daxigua-master.zip
-
库存管理项目.zip
-
文件恢复.zip (U盘数据恢复)
-
ELF视频教程
-
Qt 判断一个IPV4 地址单播/组播/广播地址
-
Docker从入门到精通