手机上有没有可以充钱的和可以下钱的电玩城

扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
下载作业帮安装包
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
对于字长为16位的计算机,若堆栈指针SP的初值为2000H,累加器AX=3000H,执行一次入栈指令PUSH AX后SP的值是多少,为什么有的说的2002,有的答案为1998,到底是哪一个,给出说明
扫二维码下载作业帮
拍照搜题,秒出答案,一键查看所有搜题记录
进栈是SP-2,出栈是SP+2,属于进栈所以SP=SP-2,SP =2000H-2,sp=1998,所以答案是1998
为您推荐:
其他类似问题
扫描下载二维码【图文】C语言程序设计第9章 高级语言程序设计C--指针_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
C语言程序设计第9章 高级语言程序设计C--指针
上传于|0|0|文档简介
&&福建省计算机二级考试复习资料,C语言程序设计课件
大小:923.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢74879人阅读
C语言 学习历程(7)
1、指针的初始化
指针初始化时,“=”的右操作数必须为内存中数据的地址,不可以是变量,也不可以直接用整型地址值(但是int*p=0;除外,该语句表示指针为空)。此时,*p只是表示定义的是个指针变量,并没有间接取值的意思。
int a = 25;
int *ptr = &a;
int b[10];
int *point = &&
int *p = &b[0];
如果:int &*p;
& & *p = 7;
则编译器(vs2008)会提示The variable 'p' is being used without being initialized.即使用了未初始化的变量p。
因为p是指向7所在的地址,*p = 7给p所指向的内存赋值,p没有赋值,所以p所指向的内存位置是随机的,没有初始化的。
p = &k; &//给p赋值
*p = 7; //给p所指向的内存赋值,即k= 7
2、指针的赋值
指针的赋值,“=”的左操作数可以是*p,也可以是p。
当“=”的左操作数是*p时,改变的是p所指向的地址存放的数据;
当“=”的左操作数是p时,改变的是p所指向的地址。
数组的变量名b表示该数组的首地址,因此p=b;也是正确的
同类型的指针赋值:
int val1 = 18,val2 = 19;
int *p1,*p2;
p1 = &val1;
p2 = &val2;
p1 = p2; & //注意啦,p1指向了val2,而没有指向val1
备注:字符串与指针的初始化和赋值
char *cp = &abcdefg&; //这个初始化过程,是将指针cp指向字符串的首地址,而并不是传递字符串的值。因为,在C语言里面,没有整体处理一个字符串的机制
赋值:
cp = &abcdefg&;
*cp=”abcdefg” ;//错误!字符串常量传递的是它的首地址,不可以通过*cp修改该字符串的值,因为该字符串为常量,而它只是简单的将指针指向该字符串常量
3、指针常量
在C语言中没有一种内建(built-in)的方法去表示指针常量,所以当我们使用它的时候通常先写成整型常量的形式,然后再通过强制类型转换把它转换成相应的类型,如:int * , double * , char *等。&所以后面所示的做法是不行的:&int *p = 0x ;&正确的方式应为:int *p = (int *) 0x; 要注意指针中只能存放地址,不能将一个非0值整型常量表达式或者其他非地址类型的数据赋给一个指针,原因就在此。在大多数计算机中,内存地址确实是以无符号整型数来表示的,而且多以16进制表示,但我们在C语言中不能用整型数去表示地址,只能用指针常量来表示,因为它是被用来赋给一个指针的。
对于这个赋值问题还可以换一个角度去理解,在C语言中,使用赋值操作符时,赋值操作符左边和右边的表达式类型应该是相同的,如果不是,赋值操作符将试图把右边表达式的值转换为左边的类型。所以如果写出int *p = 0x ;&这条语句编译器会报错:'=' : cannot convert from ' const int ' to ' int * '&,因为赋值操作符左边和右边的表达式的类型应该相同,而0x是int型常量,p是一个指向int型的指针,两者类型不同,所以正确的方式是:int
*p = (int *) 0x ;&
4、指针初始化补充
ANSI C定义了零指针常量的概念:一个具有0值的整形常量表达式,或者此类表达式被强制转换为void *类型,则称为空指针常量,它可以用来初始化或赋给任何类型的指针。也就是说,我们可以将0、0L、'/0'、2–2、0*5以及(void *)0赋给一个任何类型的指针,此后这个指针就成为一个空指针,由系统保证空指针不指向任何对象或函数。
ANSI C还定义了一个宏NULL,用来表示空指针常量。大多数C语言的实现中NULL是采用后面这种方式定义的:#define&&NULL&&((void *)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 =
& 5.将一个指针的地址赋给一个指针,如:int i = 3;&&int *ip = &i;int **pp = &
& 6.将一个字符串常量赋给一个字符指针,如:char *cp = “abcdefg”;
对指针进行初始化或赋值的实质是将一个地址或同类型(或相兼容的类型)的指针赋给它,而不管这个地址是怎么取得的。要注意的是:对于一个不确定要指向何种类型的指针,在定义它之后最好把它初始化为NULL,并在解引用这个指针时对它进行检验,防止解引用空指针。另外,为程序中任何新创建的变量提供一个合法的初始值是一个好习惯,它可以帮你避免一些不必要的麻烦。
5、void *型指针
ANSI C定义了一种void *型指针,表示定义一个指针,但不指定它指向何种类型的数据。void *型指针作为一种通用的指针,可以和其它任何类型的指针(函数指针除外)相互转化而不需要类型强制转换,但不能对它进行解引用及下标操作。C语言中的malloc函数的返回值就是一个void *型指针,我们可以把它直接赋给一个其他类型的指针,但从安全的编程风格角度以及兼容性上讲,最好还是将返回的指针强制转换为所需的类型,另外,malloc在无法满足请求时会通过返回一个空指针来作为“内存分配失败”的信号,所以要注意返回值指针的判空。
6、指向指针的指针
在指针初始化的第5种方式中提到了用一个指针的地址来初始化一个指针。回忆一下上一讲的内容:指针是一种变量,它也有自己的地址,所以它本身也是可用指针指向的对象。我们可以将指针的地址存放在另一个指针中,如:
int i = 5000;
int *pi = &i;
int **ppi = &
此时的ppi即是一个指向指针的指针,下图表示了这些对象:
&& & & & & & & & & & && &&
i的地址为108,pi的内容就是i的地址,而pi的地址为104,ppi的内容即是pi的地址。对ppi解引用照常会得到ppi所指的对象,所获得的对象是指向int型变量的指针pi。想要真正地访问到i.,必须对ppi进行两次解引用,如下面代码所示:
printf(&%d&, i );
printf(&%d&, *pi );
printf(&%d&, **ppi );
以上三条语句的输出均为5000。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:185416次
排名:千里之外
原创:10篇
评论:17条
(3)(2)(5)(5)(3)君,已阅读到文档的结尾了呢~~
[高等教育]C语言程序设计第9章 高级语言程序设计C--指针第九章指针第九章 指针(pointer) 内容提要指针的概念 指针与数组指针与字符串指针与函数多级间址动态内存分配9.1 指针的概念&br..
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
[高等教育]C语言程序设计第9章 高级语言程序设计C--指针
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口与指针相关的常见错误 - fishnet520的专栏 - CSDN博客
与指针相关的常见错误
int* i = 3;char* ch = 'a';
error C2440: 'initializing' :cannot convert from 'const char' to 'char *'
不能给char(单字符)、int、float、double指针赋常量值(但字符串指针可以,见下面详解)
int*&num = &3;&//错,常量没有地址char*&ch = &'a';&//错,常量没有地址
char* a="fish";int i=3, *b = &i;
cout&&a&&' '&&b&&
输出:fish& 0012FF34
字符串指针可赋常量,但指针本身仍是变量,值可变。要输出数值,须用 cout&&*b;要输出指针变量的值,一般都要在指针名前加 *
但字符串指针是&数组&,指针名就是这个数组名,而数组名就代表了数组的首地址,所以不必加 *
接下来考虑这个问题:
同样是将常量赋给指针,为什么 char* a = "a";可以通过编译,而 char* ch = 'a'; 就不可以呢?如果系统先申请了"a"这么一段字符串空间,然后将其首址给指针a,那char* ch='a';为什么就不可以呢?
&关于这个问题...请好心的高手赐教...(注:本文全部内容皆为自己总结,如有错误,敬请指明,谢谢!)
(3)&char*&cout&&name&&"& "&&*name&&
&int*&cout&&num&&"& "&&*num&&
无论是name、num还是*name、*num, 在未给它赋值之前是不允许读取其内容的。但可以sizeof其大小,因为sizeof只是根据其类型判断大小,并不读取其内容。但下面的语句可以正常输出:
&int* b,&b = &i;&cout&&b&&"& "&&*b&&
RESULT: 0012FF34& -
&对于未赋值的指针(常称为&野指针&),指针本身的空间已经确定,但其指向的空间(即指针的值)是不确定的,或者是随意的(函数形参例外),虽然编译没有错,但程序运行时,这个指针很可能指向内存中被其它的程序占用的空间,甚至其它非法的地方。
下面通过简单调试说明:
&char *name, *a="fish";&int*
&cout&&b&&"& "&&*b&&
开始时,三个指针变量name、a、b的值都是指向同一个地址0xcccccccc,其中a和name的值为"",而b的值为空;
按F5继续,看到a的值改变了!这很容易理解,系统不可能真的就把0xcccccccc这个地址同时分配给多个变量使用,这样肯定要出问题,而是说当你未赋初值时你们先站在这里别动,乖乖地&临时守在这个地方,不许干任何事&。一旦有新的空间给你,再&放走&这些指针。&地址&0xcccccccc&就像一个孤儿所,而指针指向的空间就像是指针的&家&,被&收养&的指针才有自己的&家&,有自己的自由。为了避免有些初学者将&指针的地址&与&指针的值&混为一谈,我们将指针的地址比作指针的&名字&,这样,任何一个指针一出身就有自己的惟一的名字,但不一定有自己的&家&。没有&家&,当然就只能暂住&孤儿所&了。
&int* b = NULL;&cout&&"&b= "&& &b &&"/t b= "&& b &&将正确输出为:&b= 0012FF34&&& b=
但*b仍然是不能输出的。之所以这样,在于NULL的特殊性。NULL实际上代表的是一个地址0x,这个地址的特殊性在于它不允许赋值(其实它真的没有值,这正是&空&的含义),实际中我们经常给一个指针赋初值为NULL,这其实是为了防止指针访问非法地址,将它们统统指向这个&禁区&。因为不能赋值,通过*b来取得的0x的值当然就会出错。
&为了揭开NULL的面纱,这里说些题外话,很多书上说&NULL就是0,但又不完全等同于0&,特别是关于Javascript介绍的书常常有这一表述,其实很让人费解,不妨从上面的解释稍作引申:NULL代表地址0x,地址是十六进制数值,将0x转为十进制不就是0吗?说二者&不完全&相等,就是因为一个是地址,而另一个是常量。
(4)用cin给指针赋值:
&char*&cout&&"Enter the Name of the worker: ";&cin&&&cout&&
有很多人说错了,原因是&name中存储的是地址,因此输出的是地址名,改为 cout&&*name 就对了&。
事实上,这段代码编译不会出错,但运行结果可能让你一头雾水,不知所措。无论你输入什么,程序一旦运行到这里,就出现&XXX.exe已停止工作&,为什么呢?
其实,要仔细研究这个问题,还要分两种情况:
&如果你输入的是单个字符,那么cout&&语句就错了,但根本原因不在这里,现在是程序不能运行,而不是运行结果不对,如果在cout&&之前无任何差错,不管你cout的是name还是*name都应该能正常显示啊,聪明一点的初学者可能马上想到问题(1),对了,这不是各问题(1)一种情况吗?只是将赋值方法由&=&改为&cin&而已,问题终于找到!
&那如果输入的是多个字符呢?这下没招了,怎么调试都不能找到原因。别担心,学过动态申请的同学可能根本不需要看这一段,不过为了说明问题,还是有必要探讨一下。用sizeof(char*)得到char*类型的指针大小为1,显然这里存放的是地址,但这个地址指向的空间又有多大?无可知晓,如果要更正上面的错误,修改如下:
&char*&name = new char[5];&cout&&"Enter the Name of the worker: ";&cin&&&cout&&
但注意这时输入字符串长度不能大于5(可以等于5)。
&&cout&&"Enter the Salary of the worker: ";&cin&&&cout&&
我的热门文章
即使是一小步也想与你分享

我要回帖

 

随机推荐