c++问题大家看看excel删除下面空白行的空填什么?

c++ 下面的空处怎么填_百度知道
c++ 下面的空处怎么填
,s)&lt#include&%s\
char s[20];n&quot,str[2]),str[3][20];i++)gets(str[i]);string.h& strcpy(s;
int i.h&0)strcpy(s;3,_______),_______);i&
if(strcmp(str[2]; #include&lt
题目是:下面程序的功能是在三个字符串中找出最小的,请填空
提问者采纳
printf(&quot,s)& strcpy(s,___str[0]____),str[1])?strcpy(s,str[3][20];;0,s)&lt找3个字符串中的最小串,___strcmp(str[1];3;
char s[20];n&quot:#include& #include&
for(i=0;%s\
if(strcmp(str[2];string,str[2]);0)strcpy(s;i++)gets(str[i]);i&lt.h&gt?如果是的话:s____),这么写.h&gt
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁c/C++指针函数问题P=P-&next_百度知道
c/C++指针函数问题P=P-&next
next对应的内容问题是这样的,这是为什么,现在有一指针w指向地址A,w对应的内容和P对应的内容相同;next后;next指向地址B?w不应该还指向A地址的吗;next对应的内容是一样的;将w地址赋给空指针P,指针w-&gt,则P-&gt,取出P指针对应的内容是和P-&gt?求指教;此时,执行P=P-&gt,而且内容不变吗,而此时w指针对应的内容也变成P-&next指向地址B
double grade(Stu_Inf *w){
Cos_Inf *q=w-&Course
Cos_Inf *t=q; 我想要得到Stu_Inf *w-&-----------我原来是把STU_Inf
*q=w;Cos_Inf *course,改成现在这样就OK了
t=t-&Stu_Inf *
return ****;typedef struct Stu_Inf{
Stu_Inf*next1;}; Cos_Inf *next2;};
地址typedef struct Cos_Inf{Cos_Inf *next2
提问者采纳
如果w P都是指针变量;n&C的内容是%d&#92按照你的说法其实是有问题的,&B),(1)w指向地址A指针;:#include & printf(&quot,C,w-&B;;n&A的内容是%d\w的内容是%d\next指向地址B,*P,B.next).next的内容是%d\说明w是指针变量;typedef struct LNode{ struct LNode *n&quot.next的内容是%d&#92,A; printf(&int main(){ Lnode *w;n&p的内容是%d\B的内容是%d\n&quot,B.next),A; printf(&quot,B可能是结构体变量;(2)将w地址赋给空指针P,B);;;?可能是你的表达有问题; B; P=P-&gt.next=NULL;n&quot,A;C的地址是%d&#92,这句话说明P是指针的指针(3)则P-& printf("以及P=P-& A;;;n&quot.next=&C; return 0; printf(& printf(&quot,A);n"这两条代码却又只能判断P是指针而并非是指针的指针 其中(2)(3)两条矛盾了,&A);;.next).next=&B,按你说的可能是指向结构体变量的指针吧看看下面程序代码; printf(&B的地址是%d\n&A,&C).h&#include &n&quot.next的内容是%d&#92,P),w);stdlib.h& printf(&A的地址是%d\}L; w=&A,C;; printf(& C; printf(& P=w; printf(&quot,最好把代码发上来;n&quot,C);}应该没有问题啊;C;next指向地址B
但其实我不明 白Stu_Inf *w-&Course-&next会跟随q改变?不知道能不能清楚说明我的问题,希望能帮我解惑,分我会给你的,谢谢。
分啊,哈哈,我都快一万分了,不是分的问题,主要是你没有把代码发上来,你把代码发上来看看
你代码中的q是Cos_Inf型指针而w是Stu_Inf型指针当然不能用q=w了
不是的,原来都是同类型Stu_Inf型指针,然后我先q=w,再q-&course=q-&course-&next,然后查w-&course就不是原来那个,而是移动后q-&course的地址了~
你最好把原来出现问题的代码发上来,否则真的是讲不清楚的!到时我在你的代码上注释一下就可以了!
double grade(Stu_Inf *w){ Stu_Inf *t=w; double addcore =0;while(t){while(t-&couse)
{ addcore=addcore+t-&course-&credit2; t-&course=t-&course-&next2; }t=t-&next1; }
return ***;}这是原来的,代码比较长,全部发不上来。
提问者评价
其他类似问题
为您推荐:
指针函数的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁C++中判定一个char是否是空格的问题。已知空格的ASCII码为32,代码如下:_百度知道
C++中判定一个char是否是空格的问题。已知空格的ASCII码为32,代码如下:
将代码改为如下:char i=' ';//这是一个空格;char j='\32';char k='\x20';if(i==j){cout&&&1判定结果&&&&true\n&;}else{cout&&&1判定结果&&&&false\n&;}if(i==(char)32){cout&&&2判定结果&&&&true\n&;}else{cout&&&2判定结果&&&&false\n&;}if(i==k){cout&&&1判定结果&&&&true\n&;}else{cout&&&1判定结果&&&&false\n&;}system(&pause&);return 0;按F10,在监视窗口监视i,j变量,发现i,j并不相同。i与k相同。 看百度百科
其他类似问题
为您推荐:
Table 5—escape sequences,八进制。转义序列中的数字是八进制的。。。;ooohex number hhh &#92。octal number ooo \xhhh,所以不能正常判定。\32相当于&#92,相应的十进制值为26而不是32;032。x前导时是16进制
ascii码的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁您所在的位置: &
C/C++中的指针的应用及注意问题
C/C++中的指针的应用及注意问题
中国IT实验室
中国IT实验室
c语言之所以强大,以及其自由性,很大部分体现在其灵活的指针运用上。因此,说指针是C/C++的灵魂一点也不为过。下面让我们一起来揭开C/C++中指针的神秘面纱。
指针是c/c++学习一个比较让人头痛的问题,在程序设计过程中,指针也往往是产生隐含bug的原因。下面就来谈谈指针的应用以及需要注意的一些问题,里面也许就有你平时没有注意到的问题,希望能帮助各位读者理解好指针。
一、我们先来回忆一下指针的概念吧,方便下面的介绍
指针是存放地址值的变量或者常量。例如:int a=1;&a就表示指针常量(&&&表示取地址运算符,也即引用)。int *b,b表示的是指针变量(注意,是b表示指针变量而不是*b),*表示要说明的是指针变量。大家注意int *b[2]和int(*b)[2]是不同的,int *b表示一个指针数组,而int (*b)[2]表示含有两个元素的int指针,这里要注意运算优先级问题,有助于理解指针问题。在这里大概介绍基本概念就够了,至于具体使用方法,如赋值等,很多书都有介绍,我就不多说了。
二、应用以及注意的问题
1、 理解指针的关键所在&&对指针类型和指针所指向的类型的理解
①、 指针类型:可以把指针名字去掉,剩下的就是这个指针
例如:int *a;//指针类型为int *
int **a;//指针类型为int **
int *(*a)[8];//指针类型为 int *(*)[8]
②、 指针所指向的类型:是指编译器将把那一片内存所看待成的类型。这里只要把指针声明语句中的指针名字和名字右边的&*&号去掉就可以了,剩下的就是指针所指向的类型。我之所以把他们放在第一位,是因为弄清楚他们是学c/c++指针的重点,正确理解他们才能使你打好c/c++的编程基础。
2、 指针的应用&&传递参数。
其实它可以相当于隐式的返回值,这就比return的方法更加灵活了,可以返回更多的值,看看下面的例子自然就明白了:
#include&&iostream.h& &void&example(int&*a1,int&&b1,int&c1) &{ &*a1*=3; &++b1; &++c1; &} &void&main() &{ &int&*a; &int&b,c; &*a=6; &b=7;c=10; &example(a,b,c); &cout&《&*a=&《*a& &cout&《&b=&& &cout&《&c=&& &}&
输出:*a=18
注意到没有,*a和b的值都改变了,而c没有变。这是由于a1是指向*a(=6)的指针,也即与a是指向同一个地址,所以当a1指向的值改变了,*a的值也就改变了。在函数中的参数使用了引用(int &b1),b1是b的别名,也可以把它当作特殊的指针来理解,所以b的值会改变。函数中的参数int c1只是在函数中起作用,当函数结束时候便消失了,所以在main()中不起作用。
3、 关于全局变量和局部变量的一个问题
先看看程序:
#include&&iostream.h& &int&a=5; &int&*example1(int&b) &{ &a+=b; &return&&a; &} &int&*example2(int&b) &{ &int&c=5; &b+=c; &return&&b; &} &void&main() &{ &int&*a1=example1(10); &int&*b1=example2(10); &cout&《&a1=&《*a1& &cout&《&b1=&《*b1& &}&
输出结果:
*b1怎么会是4135,而不是15呢?是程序的问题?没错吧?由于a是全局变量,存放在全局变量的内存区,它一直是存在的;而局部变量则是存在于函数的栈区,当函数example2调用结束后便消失,是b指向了一个不确定的区域,产生指针悬挂。
下面是对example1和example2的反汇编(用TC++ 3.0编译):
example1:
mov ax,[bp+04];传递参数
add [00AA],相加
mov ax,00AA ;返回了结果所在的地址
恢复栈,出栈
example2:
mov word ptr [bp-02],0005
mov ax,[bp-02];传递参数
add [bp+04],相加
lea ax,[bp+04];问题就出在这里
恢复栈,出栈
对比之后看出来了吧?ax应该是存储的是结果的地址。而在example2中,返回的却是[bp+04]的内容,因此指针指向了一个不确定的地方,由此产生的指针悬挂。example1中,ax返回了正确的结果的地址。
4、 内存问题:使用指针注意内存的分配和边界
使用指针过程中应该给变量一个适当的空间,以免产生不可见的错误。
请看以下代码:
#include&&iostream.h& &void&main() &{ &char&*a1; &char&*a2; &cin&》a1; &cin&》a2; &cout&《&a1=&& &cout&《&a2=&& &} &
Null pointer assignment
指针指向了&空&。解决办法就是分配适当的内存给这两个字符串。修正后的代码
#include&&iostream.h& &void&main() &{ &char&*a1; &char&*a2; &a1=new&char&[10]; &a2=new&char&[10]; &cin&》a1; &cin&》a2; &cout&《&a1=&& &cout&《&a2=&& &delete(a1);&delete(a2); &} &
到此就能输出正确的结果了。分配了适当的内存之后要注意释放内参空间,同时还应该注意不要超出所分配的内存的大小,否则会有溢出现象产生,导致不可预料的结果。
5、 关于特殊的指针&&引用
引用有时候应用起来要比指针要灵活,用它做返回的时候是不产生任何变量的副本的这样减小了内存的占用,提高执行的速度。引用使用起来要比指针好理解,比较直观。当引用作为参数时,不会改变参数的地址,因此可以作为左值。
下面请看一个例子:
#include&&iostream.h& &char&ch[5]=&ABCD&; &char&&example(int&b) &{ &return& &} &void&main() &{ &cout&《&ch=&& &example(2)=&c&; &cout《&ch=&& &}&
输出结果:
在实际编程过程中,可以灵活地引用或指针,尽量提高程序的可读性和执行效率。
三、小结:
指针是学习c/c++的重点难点,主要原因是指针较为抽象,不容易理解。使用指针千万要明白让指针指向什么地方,如何让指针指向正确的地方。在深入系统底层之中需要应用到大量的指针,因此需要理解好指针的基本概念,例如:指针类型和指针所指向的类型。平时应该对留心观察,了解程序的工作过程,必要时候可以对程序进行反汇编,加深对指针的理解,这种方法同样适合学别的编程方面的知识。
指针的应用是很广泛的,利用指针可以做很多事情,要成为一个好的程序员,必须对指针有比较深刻的了解。希望通过本文让大家对指针有更深一层的了解,提高指针的应用能力,相信能给大家一定的帮助。
【编辑推荐】
【责任编辑: TEL:(010)】
关于&&&&的更多文章
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
在过去的近十年的时间里,面向对象编程大行其道。以至
很久很久以前,冬天爱上了夏天,可是他们始终不能相见
流火过,金秋来,在学校开学之前的最后一周,终于凉快
本书将介绍如何创建可交互的Web站点,包括从最简单的订单表单到复杂的安全电子商务站点。而且,读者还将了解如何使用开放源代码
51CTO旗下网站C++&空指针检测问题(一)
某些C/C++编程的书中,曾经提到如何判断指针是否为空的问题.很显然,if
& (p & == &
NULL), & if & (p
& 和if(p),都能够完成这一任务,差别在于可读性方面.我们分别加以讨论.
1. & if & (p &
== & NULL) 相当多的文章建议采用,他们中的部分人甚至认为,其他做法都是错误的.这个形式一个变种是 & if & (NULL
& == & p),虽然略显怪异,但是,万一我们误将==写成了=,编译器通常都会给出编译错误,从而防止键入的错误.拥护这一方案的人认为,NULL可以明确地表达 出p
& 是一个指针,而不是整数或其他什么东西.有助于我们理解代码.然而,反对者也众多,包括C++之父B.S.反对的主要根据是,NULL并不是语言的一部 分,通常,它是由一个宏定义而来的:
#define & NULL &
((void*)0) 一般来说,NULL其实可以工作的很好,但是,宏的出身,让它不让人喜欢.另外,它也确实有些现实的问题,典型的,成员指针的问题.假设有类型A,
typedef & void &
(A::*FUNT)(); 现在,FUNT定义成一个成员函数指针类型了.假设有FUNT
& fun & = &
... 对于if & (fun & ==
& NULL)将会导致编译失败.原因在于FUNT和void*之间不存在类型转换.不仅仅成员函数存在这个问题,普通函数指针也可能存在这个问题. 那么,我们改变NULL的定义呢?尝试这样定义:
#define & NULL &
& (0) 或者
#define & NULL & 0
这也可能存在问题.NULL这个名字意味着自己是个指针,只允许指针和NULL比较,然而事实上却并非如此.这有欺骗的嫌疑.许多人认为,欺骗不可接受,暴露问题比欺骗要好得多.这种欺骗导致编译器无法提供恰当的帮助.
2. & if & (p &
== & 0) 包括B.S在内的许多人也推荐这种方式----尽管他们大多认为这个方案并不完美.首先,语言内部对于常量0有特殊的处理,因此,第一种选择中可能遇到的 和函数或成员函数指针比较失败的问题可以解决.另一方面,它没有强调自己必须和指针比较,因此,也不存在欺骗.而且,因为这种方式受语言支持,每个C++
& 程序员都会熟悉这一方法,而不会觉得难以理解.并且,一个新的语言改进正在进行,会为语言提供一个nullptr的关键字,专门用来和各种指针比较.但目 前的语言实现基本上还不支持这一特性.
& (p) 许多C++的铁杆或资深用户对前两个方案嗤之以鼻.他们认为这个方案正确,简单,有效. & 另外,这一方案可以有效地应用到所谓smart_ptr上去.而1和2方案往往会带来潜在的不安全因素.假设,我们现在有一个smart_ptr类,为了 支持第一种语法,我们需要为之定义一个全局的比较函数.但是,这也意味着要提供一系列长相难看(参数类型不对称)的重载,而且,需要花费很多精力.并且,
难以提供一个完全一致的实现.
我们看一下,为了支持smart_ptr,不同方案分别需要做些什么.
为方案1,我们要定义:
bool & operatro & ==(
& const & type&
& L, & void* &
bool & operatro & ==(
& void* & null,
& const & type&
& R); 同样,还需要重载operator
& !=; 这里的问题是,smart_ptr我们本来不指望和任何void指针比较相等的,但是现在不得不允许了.也就是说,我们可以和一个非NULL的void指针比较了.而我们的本意是:查询这个指针是不是空. 方案2存在同样的问题,而且更严重.我们可能和任意整数比较了.而对于普通的指针,和非0常量比较会编译失败的.
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 指甲下面空了 的文章

 

随机推荐