C语言 指针与数组 求程序输出结果

C语言 指针与数组 求程序输出结果,第1张

第一题你好象写错了;

#include

<iostream>

using

namespace

std;

int

main()

{

char

str[]="xyz",ps;

ps=str;

while(ps)

ps++;

for(ps--;ps-str>=0;ps--)

putchar(ps);

return

0;

}

ps=str是正确的,因为你的ps在上边定义的是一个指针。那么下边的赋值运算中就应该是地址之间的传递,str作为数组名,它本身就是一个地址。同时ps也是一个指针。结果就是

xyz

第二题的答案是:

4

5

因为作为形式参数的b在传递到你的调用函数f之后虽然做了++ *** 作但是这个b却只是一个副本,不是真正的b,等这个f函数执行完毕之后就会把这个副本释放掉,对主函数的b并不产生影响。要想修改主函数中的数值,在传递参数的时候只有传递指针,就像你的a那样,给函数传递一个指针就可以。

第三题答案是17

这个题就是把这个数组中的所有奇数项想加

第四题

答案是24

就是把所有偶数的元素都设置成

第五题就是

2

5

8

10

0

整个题目就是把a[4]=a[0]+a[1]+a[2]+a[3]+a[4]

#include<stdioh>

void main()

{

char str[]="xyz"; //定义一个字符串数组,并将其初始化共4个元素,即:str[0]='x',str[0]='y',str[0]='z',str[0]='\0'因为是字符串,所以最后一个数组元素中存放的是'\0'

char ps=str; //定义一个指针ps,并将其指向数组的首地址,即ps指向str[0]

while(ps) //while循环,只要指针ps指向地址里的值,不等于'\0',就执行while的循环体

ps++; //指针ps指向下一个地址,while循环执行完事之后,ps指向的是str[4]

for(ps--;ps-str>=0;ps--) //ps--等于ps指向str[3],ps-str相当于,str[3]-str[0]等于str[3]依此类推。直到ps-str<0时退出程序。

printf("%s \n",ps); //第一次输出z,第二次输出yz,第三次输出xyz,加上一个换行,输出的时候能看得明显点哦

}

“[]”中间必须是整形常量或整形常量表达式。

数组定义时,必须指定数组的大小,数组大小必须是整形常量表达式,不能是变量或者变量表达式

错误例子:int n=10; int a[n]; int b[103]; int c[n+10];

1无正确答案,可能把逗号打成分号了

main(int argc,char argv[] );

2选C

3选B

4选B

5选D

6暂不讨论,后面给出

7选D

8选C

9选C

10选B

下面给出几个有异议的题目的分析

6题目分析如下:

int p1,p2,m=5,n;

A、p1=&m;p2=&p1;//p1本身就是个指针,&p1则是取这个指针的地址

实际上,p1是int类型的,而&p1是int类型的,至于这个,你看看指向指针的指针就明白了

也就是说,这条赋值语句是将int类型的值赋给int类型,而编译器不能执行这种转换,所以错误

Bp1=&m;p2=&n;p1=p2; //这个会涉及到你的n是在主函数里还是在主函数外定义的,如果在主函数外定义,也就是说它具有全局作用域,则n是被默认初始化为0,那么,两个指针p1和p2都进行了初始化,就是正确的,而如果n是在主函数内定义的,那么n是未被初始化的,那么你引用n(即p2)则引用的是一块不确定的内存空间,这个是运行时错误这里,p2是未被初始化的,它是个悬挂指针或者说是野指针

Cp1=&m;p2=p1; //这个没啥说的p1和p2都初始化为指向同一个变量m的指针,所以正确

Dp1=&m;p2=p1; //p2是未被初始化的,也就是说,它是悬挂指针或野指针,你用p2引用的将是一块不确定的内存空间,你通过赋值语句,将会改写你的p2所引用的这块内存空间所存放的内容,如果这块内存空间恰好是某个其他应用程序的,那么你改写了它的内容,可能会导致这个应用程序不能正常运行

10题目也有异议,分析一下

楼上有个选A的,我来说下为什么你的错了

就一句话,你没考虑指针的移动,即这条语句,可能被你无意忽视了

p+=3;

PS;至于其他的,就没啥好说的了

一、指针变量的初始化问题

指针变量同普通变量一样,使用之前不仅要定义说明,而且必须进行初始化,指针的 初始值必须是一个地址,决不允许赋予任何其他数据, 通常是一个数据的地址或地址 变量或空指针。

1、指针变量未被初始化

指针变量未被初始化,指针变量就不会被分配存储空间。在程序中如果使用了未被分配 空间的指针,就会出现难以查找的错误。

如在程序

main()

{int x, p;

x= 100;

p= x;

printf(“p=%d\n”,p);

}

中,指针变量p因没有初始化,在执行语句p= x;之前p的内容是未知的,当程序将100赋给 一个没有确定指向内存的指针变量p,而使得数据100被存入一个未知的单元。这个程序虽然 很小,所占的内存小,问题不明显,但实质上它却隐含着一个致命的错误。这是因为随着程 序的增大,很有可能访问到致命的地址单元,将会导致计算机系统工作区域内有用数据的破 坏,引起数据段 *** 作系统的损毁,造成机器运行失常,甚至 “死机”。

解决方法是指针必须初始化后,才能使用。

本例中 p=&x; 程序便可正常运行。

2、指针初始值可赋值为空值 

指针变量值为0的指针称为零指针(空指针)。其表示形式为int p=0;表示p指向地 址为0的单元,系统保证该单元不作其他应用,表示指针变量值没有意义。可以写成:

#define NULL (void )0

int p=NULL;

定义零指针主要用于避免指针变量的非法引用和在程序中比较指针变量是否为空两个方 面。因此,不能把一个空指针用于除此之外的其他比较。若某些系统允许第0号内存既可以 被写入也可以被读出,这时错用空指针可能会改写 *** 作系统的一部分内容,从而使系统彻底 崩溃;若系统只允许读0号内存,这时空指针指向一个有用的字符串;若系统对0号单元实行 写保护,则对空指针的 *** 作将失败。因此,使用空指针时要特别小心。



二、指针变量赋值问题

1、指针赋值带来的内存丢失

在C语言中指针之间是可以相互赋值的,但是使用不当可能会造成部分内存的“丢失” ,即这部分内存空间不能再被该任何程序访问。如: 

main()

{float a, b;

a=(float)malloc( sizeof( float));

b=(float)malloc( sizeof( float));

a= 227 5;

b= 163 9;

a= b;

printf(“%f,%f,a, b);

}

上例中将指针变量b赋给了指针变量a,使a与b都指向分配给b的内存空间,而原先分配 给a的内存空间未释放,不能再被其它任何程序访问,该内存空间成了“无效内存块”,内 存空间“丢失”了,而a后来指向的内存单元又直接或间接地被反复调用,内存愈来愈紧张 ,最终“死机”。

解决方法:一个指针变量赋给另一个指针变量前,应先用free( )释放所占有的内存空 间,使这部分空间可以由系统重新支配,即应在赋值语句前执行:free (a)。

2、指针变量赋值错误

C语言规定,一个指针变量只能指向同类型的变量,不能时而指向一个整型变量,时而 指向一个字符型变量。当然,如果程序中确实需要进行不同类型的 指针变量进行赋值时, 则需要进行强制类型转换。

3、混淆指针变量和它所指向的数据而导致程序错误

如在程序

main()

{int x, p;

x= 10; p= x;

printf(“%d”,p);

}

中,语句p= x把数据10而不是10所对应的单元地址赋给指针变量p,因而printf()调用 语句无法在屏幕上显示x的值。



三、指针用于数组时应注意的问题

1、混淆数组名与指针变量的区别

main()

{int i, a[ 8];

for( i= 0; i< 8; i++)

scanf(“%d”,a++);

}

分析:C语言中约定,指针变量是一个变量,地址为其值;数组名是一个常量指针,在 系统为数组分配存储单元时确定,其值是该数组首元素的地址。因此数组名不能自增自减 ,也不能在赋值语句中作左值例程中企图通过对a的改变使指针下移,指向欲输入数据的数 组元素。它的错误在于不了解数组名代表的是数组首地址,是一个地址常量,而地址常量的 值是不能改变的。

2、指针越界错误

由于对内存中数据放置的错误假定,导致指针超出数据对象所占内存空间的大小。

例:main()

{int a[5], b[5] ;

int p, i ; 

p=a; 

for (i=0; i<10:i++) p++=i;}

分析:该程序想通过指针变量p的自加运算来完成用0~9初始化数组a和b,但这是建立 在数组a和b相邻存放的基础上的,事实上这种情况并不一定成立。

3、混淆数组与指针的区别

例:main()

{char p=“beijing”;

p[0]= ‘B’;}

分析:程序没有正确区分数组和指针。在C语言中,当把字符串常量赋予指针时,该字 符串常量就存储在静态存储区中。此时数据不能用指针修改,应用数组的方式进行修改。



以上就是关于C语言 指针与数组 求程序输出结果全部的内容,包括:C语言 指针与数组 求程序输出结果、C程序解释、c++程序题,ps后面为什么有中括号,数组吗等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10074192.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存