`
张永建
  • 浏览: 11482 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

二级C试题(7)

    博客分类:
  • C
C 
阅读更多

在调用函数时,如果实参是简单的变量,它与对应形参之间的数据传递方式是A.地址传递 B.单向值传递C.由实参传形参,再由形参传实参 D.传递方式由用户指定
正确答案:B
函数调用时,在主调函数和被调函数之间,存在着数据的传递,利用参数传递数据和利用返回值传递数据是常用的两种方法。
函数调用时的参数叫做实参,函数执行时的参数叫做形参,利用参数传递数据实质是指函数实参和形参之间的数据传递过程。存在两种数据传递的方式:传值和传地址。
在 函数调用时,系统为形参准备空间,并把实参的值赋值到形参空间中,在调用结束后,形参空间将被释放,而实参的值保持不变,这就是传值传递方式。传值传递方 式中实参与形参之间的数据传递是单向的,只能由实参传递给形参。因而,即使形参的值在函数执行过程中发生了变化,也不会影响到实参值。在C语言中,当参数 类型是非指针类型和非数组类型时,均采用传值方式。
传地址方式把实参的地址赋值给形参,这样形参就可以根据地址值访问和更改实参的内容,从而实现双向传递。当参数类型是指针类型或数组类型时,均采用传地址方式。
区别于参数传值方式和返回值传递方式,传地址方式具有明显的优势。
(1)参数传值方式是主调函数与被调函数之间的单向数据传递方式,而参数的传地址方式则实现了二者之间的双向数据传递。
(2)函数的返回值每次只能把一个数据项从被调函数传递到主调函数,而参数的传地址方式却可一次性地传递多个数据项到主调函数。
根据上述描述,由于本题中说的实参是普通的变量,即非指针类型和数组类型,那么采用的是传值方式,是单向的。因此,本题的答案是B。


c语言函数调用时,实参和形参是如何传递的?什么时候要写指针型变量?
形参在函数定义时表示的一种占位符,实参就是里面存有实际变量值或者常量,函数调用时,实参值会自动传递给形参变量。指针比较复杂了。是变量的地址,如果参数类型是指针类型,则必须把实参变量的地址传递过去。当然在函数内也是间接引用实参变量的。
比如
void f(int * p)  //形参是指针类型变量

下面是调用形式
f(&a); //调用函数,实参是变量a的地址。

之 所以采用指针作为函数参数的原因是因为:在函数调用的时候,只有从实参到形参的单向传递,在函数运行结束的时候,并没有形参到实参的反向传递。   当我们需要调用函数是为了对某些数据进行各种处理的时候,如果直接采用希望处理的数据的数据类型作为调用函数的形参的时候,虽然在函数调用的时候,我们希 望进行数据传递到了调用函数的形参中去,并在函数运行中进行了相关的处理,但是在函数运行结束后,形参马上释放,实参并无法得到函数运行结束后相对应的形 参中的数据。
       当我们采用指针作为函数参数的时候,需要在调用的函数中也设置相对应的指针形参。在主程序中,将我们希望进行处理的数据与各个指针变量联系起来。在调用函 数的时候,将指向数据的指针实参传递到调用函数的形参中去,这样形参中的指针变量同样指向了我们希望处理的数据,然后对形参的指针变量指向的数据进行各种 希望的处理。这样,及时在调用函数运行完成后,虽然各个形参指针变量进行了释放。但是我们已经对我们希望处理的数据进行了相关的处理。这样就实现了“通过 调用函数使变量的值发生变化,在主调函数中使用这些已经改变了的值"的目的。

      swap( int *p1 , int *p2 )
      {
          int temp ;
          temp = *p1 ;
          *p1 = *p2 ;
          *p2 = temp ;
       }

main ( )
      {
         int a , b ;
         int *point_1 ; int *point_2 ;
         scanf ( "%d,%d" , &a , &b ) ;
         *point_1 = a ;
         *point_2 = b ;
         swap ( point_1 , point_2 ) ;
         printf ( "\n%d,%d\n" , a , b ) ;
      }

        另外:我们在通过调用子函数改变主调函数中变量值的时候,不能通过改变子函数中的指针变量的值来实现。因为改变后的指针变量同样无法传递给主调函数。 我们只能通过改变子函数中指针变量所指向变量的值来实现我们所希望实现的功能。



C语言不允许以下的赋值:
struct student
{
int num;
char name[20];
};

struct student stu = {10101,"Li Lin"};
struct student stu1;
stu1 = stu;
但当结构体变量作为参数时,却能如下使用:
void print(struct student stu)
{
////////函数体
}

void main()
{
struct student
{
int num;
char name[20];
};

struct student stu = {10101,"Li Lin"};
print(stu);
}
当实参结构体向形参传值时,也可以看成是赋值操作啊,为什么这个就行呢,怎么理解啊?
char name[20]; 数组是不能相互赋值

#include <iostream>

using namespace std;

struct student

{
   
int num;
   
char chr[20];

};



int main()
{
   
struct student stu ={1001,"Liulin"};
    cout<<stu.num<<endl;
   
cout<<stu.chr<<endl;
   
return 0;

}

2个相同结构体类型的结构体变量  是可以直接用"="赋值符号进行赋值,
语句在函数体外 所以才不可以执行.
说  数组不能直接相互赋值 但是当数组是结构体的一部分的时候
相同类型的结构体是可以直接赋值的
//代码完全能够通过

#include<stdio.h>
struct student
{
int num;
char name[20];
};
void main()
{
struct student a={100,"fhue"};
struct student b;
b = a;
printf("%d  %s",b.num,b.name);

}
在vc 6.0 和 vs2005 中都试了,可以赋值,而且初始化以后也可以用结构体直接赋值。
vs2005中代码入下:
#include "stdafx.h"
#include <stdio.h>
#include<string.h>

struct student
{
int num;
char name[20];
};

struct student stu = {10101,"Li Lin"};
struct student stu1;

int _tmain(int argc, _TCHAR* argv[])
{
stu1.num=10;
strcpy(stu1.name,"asdf");
stu1=stu;
printf("%d\t%s\n",stu1.num,stu1.name);

getchar();
return 0;
}

分享到:
评论

相关推荐

    历年计算机二级C语言试题

    计算机二级C语言试题是针对全国计算机等级考试中的二级C语言科目的一个重要学习资源。这个压缩包文件包含了历年的考试题目,对于备考者来说是极为宝贵的复习材料。C语言是一种广泛应用的编程语言,它以其高效、灵活...

    2023年全国计算机二级C语言试题与答案-20221212191736.pdf

    "2023年全国计算机二级C语言试题与答案" 本资源是2023年全国计算机二级C语言试题与答案的PDF文件,涵盖了C语言的基本概念、语法、函数、变量、数据类型、运算符、控制结构、数组、指针、结构体、文件操作等方面的...

    国考二级c语言上机试题

    【标题】"国考二级C语言上机试题"所涉及的知识点主要集中在C语言编程的基础概念、语法结构、数据类型、运算符、控制结构、数组、指针、函数、输入/输出等方面。这些是全国计算机等级考试二级C语言部分的核心内容,...

    全国计算机二级C语言试题与答案.pdf

    ### 全国计算机二级C语言试题与答案解析 #### 一、选择题解析 ##### 2.1 C语言的特点 **正确答案:** C - **选项解析:** - **A**: "C语言比其他语言高级"。这种表述不准确。编程语言的“高级”与否并不是绝对的...

    全国计算机等级考试二级C语言历年试题及答案合集

    全国计算机等级考试二级C语言历年试题及答案合集是一份极具价值的学习资源,专为准备参加计算机等级考试的考生提供。这份合集包含了C语言历年来的考试题目与对应的解答,对于备考者来说,是深入理解和掌握C语言知识...

    二级C语言公共试题

    【标题】"二级C语言公共试题"涉及到的是中国计算机等级考试中的二级C语言部分,这是一个针对初学者和有一定基础的学习者设计的考试,旨在检验考生对C语言编程的基础理论知识和实际编程能力。C语言是一种广泛应用的...

    c语言二级上级试题库

    这个"二级C.exe"文件可能是模拟考试环境的执行程序,通过它,考生可以进行实战练习,检验对以上知识点的掌握程度。利用这样的资源,考生可以反复练习,提高编程能力和应试水平。同时,"考点精讲"部分可能包含了对...

    等考二级C语言历年试题

    等考二级C语言历年试题

    C语言试题,二级C语言试题.doc

    C语言试题,二级C语言试题.doc

    2012年3月计算机二级C语言试题和答案

    【2012年3月计算机二级C语言试题与答案详解】 C语言,作为一门基础且广泛应用的编程语言,是全国计算机等级考试二级的重要考察对象。2012年3月的计算机二级C语言试题,旨在检验考生对于C语言的基本语法、数据类型、...

    二级c语言试题

    根据提供的信息,我们可以总结出以下关于“二级C语言试题”的知识点: ### 一、二级C语言考试概述 二级C语言考试是中国计算机等级考试的一部分,主要针对具备一定编程基础的考生,旨在测试他们对C语言的基本语法、...

    2008年计算机等级考试二级C语言试题及答案

    2008年计算机等级考试二级C语言试题及答案是针对全国计算机等级考试二级C语言科目的备考资料,旨在帮助考生在考试前进行有效的复习和模拟训练。这份资料包含了多套模拟试题和相应的答案,对于考生来说,是提升编程...

    计算机二级C语言试题及答案.docx

    "计算机二级C语言试题及答案" 本资源是关于计算机二级C语言考试题的总结,涵盖了C语言的基本概念、语法结构、数据类型、运算符、控制结构、函数、数组、指针等方面的知识点。下面是对该资源中包含的知识点的详细...

    二级C语言试题及答案

    很好 棒极了,里面有上百道二级试题及参考答案还有详解,觉得不错,大家分享一下

    全国计算机二级C语言等级考试

    全国计算机二级C语言等级考试是针对计算机编程初学者和专业人士的一项资格认证,旨在评估考生对C语言编程基础知识、程序设计方法以及问题解决能力的理解。这个考试通常包括理论知识和实践编程两部分,全面覆盖了...

    历年全国计算机二级C语言试题库完整-.pdf

    历年全国计算机二级C语言试题库完整-.pdf

    c语言\二级c试题—2011

    【标题】:“C语言\二级C试题—2011” C语言,作为一种基础的编程语言,被广泛应用于计算机科学教育和实际开发中。中国的计算机等级考试,特别是二级C语言考试,是衡量考生对C语言掌握程度的标准之一。2011年的二级...

    上海市计算机二级考试C语言试题.pdf

    "上海市计算机二级考试C语言试题.pdf" 本文档包含四个C语言试题,涵盖了不同领域的知识点,包括字符串处理、循环语句、判断语句、数组操作等。 一、程序设计题1:输出n行由大写字母A开始构成的三角形字符阵列图形 ...

    全国计算机二级C语言模拟试题

    全国计算机二级C语言模拟试题是针对准备参加计算机二级考试,特别是C语言部分的考生们的重要学习资源。这类试题集通常包含了大量的练习题和模拟试卷,旨在帮助考生熟悉考试的题型、难度和时间安排,提高他们的应试...

Global site tag (gtag.js) - Google Analytics