有以下程序#include的输出结果是

以下程序的输出结果是_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
以下程序的输出结果是
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢以下程序的输出结果是_百度知道
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。
以下程序的输出结果是
} main() { int a=31; fun(5!!,2!以下程序的输出结果是 A) 0 B) 29 C) 31 D) 无定值 fun(int x, int y, int z) { z=x*x+y*y,a); printf(&%d&请详解,谢谢
rintf(&%d&%d\n&,a);,a);与printf(&quot
我有更好的答案
答案“C”,因为虽然你上面定义的函数是算出X的二次方与Y的二次方的和值,但在定义他时没有写入“return”返回函数,所以该函数不能返回他所运算的值,再在最后的printf()函数中所定义的“格式化字符”中定义的是“a”,当然程序执行到这一步时所输出的值就是“a”的值“31”了。
采纳率:48%
在fun里面 int z是局部变量 a在程序运行的过程中并没有发生改变
选C。因为吧,他那个函数只是调用了,但是并没有赋值给a,而且fun里没有return语句,也就是说,形参z在调用完后就释放了,而a还是31.
31 怎么这么多问二级试题的,是不是快考试了
选C,因为C语言值的传递时单向传递的。
因为function中修改的过程没有影响到a在主函数中的值,这种传值方式称作值传递,而只有地址传递的方式才会对主函数中的值有影响.
其他5条回答
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包百度题库旨在为考生提供高效的智能备考服务,全面覆盖中小学财会类、建筑工程、职业资格、医卫类、计算机类等领域。拥有优质丰富的学习资料和备考全阶段的高效服务,助您不断前行!
京ICP证号&&
京网文[3号&&
Copyright (C) 2017 Baidup[0][0]指的是第一个元素;
p[0]+1指的是第一行第二个元素;
(*p)[2]数组指针,表示第一行的第三个元素;
**(p+1)表示第二行第一个元素;
一维数组:
a &=& &a[0]
a+1 &=& &a[1]
*a &=& a[0]
*(a+1) &=& a[1]
二维数组:
a[0] &=&&a[0][0]
a[1] &=& &a[1][0]
a[1]+1 &=& &a[1][1]
*a[0] &=&a[0][0]
*a[1] &=& a[1][0]
&=& a[1][1]
1、p[0][0]好理解,相当于n[0][0]
2、*(p[0] + 1):分两步理解(1)p[0] +
1,由于p是一个指针数组p[0]相当于n[0](是个地址),然后加1,指向n[0][1],(2)* 取内容,故*(p[0]+1)意思是取p[0]+1地址的内容,即是n[0][1]
3、(*p)[2],我是这样理解的,首先p是一个二级指针,p[0]指向n的第一行,p[1]指向n的第二行;然后*p得到的是n的第一行的首地址,一个地址相当于一个一级指针,和[2]结合,就相当于n[0][2]了
p[0][0]指的是第一个元素;
p[0]+1指的是第一行第二个元素;
(*p)[2]数组指针,表示第一行的第三个元素;
**(p+1)表示第二行第一个元素;
a[3]声明的是一维数组,则(*p)[3]也是一维数组,只不过p为指向二维数组的指针,p=n,则:
p[0][0] = n[0][0] = 10
*(p[0]+1) = n[0][1] = 20
(*p)[2] = *(*(p+0)+2) = n[0][2] = 30 故选C
*p=p[0] 第三个(*p)[2]=p[0][2]
int (*p)[3];
//声明一个指针p,指向一个可以容纳三个int值的数组
int *p[3];
//声明一个指针数组p,该数组可以容纳3个指向int值的指针
第4行代码相当于定义了一个二级指针p,然后第五行将二维数组的首地址赋值给p,p[0][0]是下标访问,不多说。p[0]+1中p[0]本身为一维数组名,所以+1是地址运算,指向下一个数组中的元素,即20,属于指针访问
关键的(*p)代表{10,20,30}的首地址,其实就是数组名,[2]属于下标访问,即30
p=n,所以p[0][0] = n[0][0] = 10;
p = n ,所以p[0] = n[0],所以*(p[0]+1) = *(n[0]+1) = n[0][1]
p = n = &n[0],所以*p = n[0],所以(*p)[2] = n[0][2]
p是一个指向包含3个整型元素的数组的指针,为二级指针。
p[0]选定了一个子数组,所以它的类型是一个指向整型的指针,对p[0] + 1,表示指针向右移动一位。
p=n;---p和指向同一二维数组
一级地址指向行的首地址:p[0] 相当与 p[] = {10,20,30},p[1] 相当于 p[] = {40,50,60}
所以p[0][0] = 10;
p[0]+1 = 20;
(*p)[2] = 30;
一维数组:
a &=& &a[0]
a+1 &=& &a[1]
*a &=& a[0]
*(a+1) &=& a[1]
二维数组:
a[0] &=&&a[0][0]
a[1] &=& &a[1][0]
a[1]+1 &=& &a[1][1]
*a[0] &=&a[0][0]
*a[1] &=& a[1][0]
&=& a[1][1]
int n[][3]={10,20,30,40,50,60};
//等同于n[2][3],n类型为int **,假设该数组为A
int (*p)[3];
//p为一个数组指针,指向一个包含3个int元素的数组,p类型为int **,假设该数组为B
//把二维数组指针赋给P
那么,p[0] = *(p+0)表示数组B中的第一个元素的指针,等同于n[0]
1、p[0][0] = *(*(p+0)) 即数组B中的第一个元素10
2、p[0]+1表示数组B中的第二个元素的指针,
*(p[0]+1)表示B中第二个元素,即20
3、*p表示数组B的指针,
(*p) 等同于n[0],
(*p)[2] = n[0][2] = 30
第i行第j列元素p[i][j];
p[0]第一行元素的首地址
*p[0]第一行第一个元素;*(p[0]+1)第一行第2个元素;....
p[1]第二行元素的首地址,*p[1]第二行第二个元素,*(p[1]+1) = p[1][1]
m*n矩阵中第i行第j列元素(*p)[i*m+j]
二维数组可以称为数组的数组,n和p都是指向数组的数组的指针,所以p[0]可以看作指向一维数组{10,20,30}的指针,p[0][0]就是10
*(p[0]+1)就是p[0][1],p刚刚也说过是指向数组的数组,即*p就是p[0]
(*p)[2]==p[0][2]
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
浙ICP备号-2
扫一扫,把题目装进口袋32位机器上, 任何指针变量都只占4个字节。 64位机器则是8个字节。
str是复合类型数组char[6],维度6是其类型的一部分,sizeof取其 维度*sizeof(char),故为6;
strlen 求c类型string 的长度,不含尾部的'\0',故为5;
p只是个指针,32位机上为4;
c++中不允许隐式的数组拷贝,所以Func的参数会被隐式地转为char*,故为4;
note:若Func的原型为void Func(char (&str_arg)
[6])(若不为6则调用出错),则结果为6.
1.C语言的字符串以‘\0’作为结尾,当使用sizeof的时候,会将结尾符计算进去,因此是5;
2. strlen函数专门用来计算字符串,因此忽略了'\0',所以大小为4;
3.传入的是一个指针,在32位系统之下,一个指针的大小为4字节;
4.当数组被作为参数传递的时候,实际函数得到的是数组的首元素的地址指针,本质是指针,所以大小和第三个一样;
前面的两个基本都能够答对 在还是在第三个的时候 转化为指针时 p只是一个指针 在32位机器上占4个字节
都是什么栏解析
第一个长度,是实际数组的长度5个字符,一个隐式的‘\0’编译会分配6个字节
第二个长度,标准的C库函数,返回字符串实际长度,那么是5个字符
第三个长度,是一个指针的长度,就是计算机系统的地址长度,32位机器 4字节
第四个和第三个同理,形参传递数组,传递的是数组首地址
以为会默认加斜杠零
sizeof运算符 既可以作用于字符串,也可作用于内置类型和自定义类型, 用于字符串时,返回字符串所占内存空间的大小, str[100]是100个字节,str[]=&Hello&是6个字节(包括自动补上的'\0')
strlen是字符串测长函数,不是运算符,参数只能是字符串或指向字符串的指针,函数返回字符串不包含 '\0'部分 的实际长度, strlen作用于str[100]= &Hello&、 str[]=&Hello&的返回值都是5 (strlen函数停止计数的条件是首次遇到 '\0',因此,strlen(&abc\0edf\0&)的值是3,而不是6 )
字符串作为参数传递给子函数时,子函数接受到的是指向字符串的指针, 32位机器上, 任何指针变量都只占4个字节。
64位机器则是8个字节,因此无论字符串如何变化, 调用sizeof(char*)后返回的都是4
sizeOf strlength的区别
前面有一题跟这个类似的意思,数组名转换成指针时用sizeof计算要分清 别混了
数组作为函数参数传递的时候,已经退化为指针
strlen的结果要在运行的时候才能计算出来,是用来计算字符串的长度,不是类型占内存的大小
sizeof操作符的结果类型是size_t,它在头文件中typedef为unsigned int类型。
该类型保证能容纳实现所建立的最大对象的字节大小。
最后一个4是因为str传到函数中退化为指针。
这样理解应该没错吧?
这道题你会答吗?花几分钟告诉大家答案吧!
扫描二维码,关注牛客网
下载牛客APP,随时随地刷题
浙ICP备号-2
扫一扫,把题目装进口袋}

我要回帖

更多关于 下面程序的运行结果是 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信