1,谁能说一下C语言参数传值和传引用是什么概念谢谢你好,首先纠正一下你的一个错误 , C语言里没有引用的概念 。引用就是一个别名,定义一个变量a,再定义一个引用c,即 int &c = a;就是给a变了个别名 , 实际上是一个实体 。传值就是将变量的值复制一遍,在函数调用栈上使用,还有一个传指针,即传变量地址,就是将变量的地址传到函数栈上去,这样,函数在栈上执行对该变量的操作都会直接操作到原变量的值 。传引用和传指针都能直接改变原变量的值,而传值不能修改原变量,只能修改它们的复制品(即在栈上建立的变量并被赋予了传进来的变量的值);C语言只能“参数传值”,没有“引用传递” 。C++有引用传递 。传值就是传递值 , 引用传递就是传地址,可以形实参数可以同步变化 。你好!传值只是把这个变量的值赋给形参,改变形参的值,实参不变 。传引用时改变形参,实参也会改变 。希望对你有所帮助,望采纳 。
2,C传值传引用机理传值就是将值付给函数的临时变量,因此存在调用函数对此变量或常量的入栈出栈操作 。传地址是传值的一种变换方式,只是传入的是一个地址值 。因此在函数中使用的时候如果直接给地址赋值 , 函数不会修改此地址或此地址指向的内容,使用*地址方式可以修改此地址指向的内容,这个深入理解一下指针就知道了 。传引用在C++底层是使用传地址实现的 。语法不同,编译器处理了 。这个<>这本书中有说明你好!函数的参数是保存在堆栈中的,传值就是在堆栈中构造一个类(对于类类型是调用它的拷贝构造函数,对于基本类型是拷贝它的值) , 传引用或者指针就是在堆栈中保存实例的一个地址,引用和指针的区别就是,引用可以使用实例的语法访问成员(就是用点而不是箭头),引用一定是初始化了的且不出意外一定是指向一个存在的对象 , 而指针可能指向NULL,此处说的意外就是:A *a = new A();A &b = *a;delete a;b.func(); //会出现访问违例被调函数从堆栈中访问数据(也就是函数的参数),对于函数来说,参数和它的局部变量是一样的,所以传值的时候不会修改原先的值,而传引用时会 。因为要重新构造,所以传值的效率低而传引用要高 。有些类的拷贝构造函数是私有的,就不能采用传值的方法了 。仅代表个人观点,不喜勿喷,谢谢 。
3,C中如何实现数组的传值引用最简便的方法就是使用指针 , 定义同类型的指针指向数组的起始位置,接下来使用*++或者*+n来操作例如:char arry【5】;char *ch = &arry【0】;for (int i = 0; i < 5; i++)cout << ch++;}for (int i = 0; i < 5; i++)cout << ch + i;}楼主,麻烦你说清楚点行不……你指的传值是空数组,还是有数值的数组呢? 一维数组 int[] arr; arr = new int[5];System.Console.WriteLine(arr[4]);初始化 C# 数组元素可以在创建时使用int[] arr2Lines; arr2Lines = new int[5] ; 但 C# 初始值设定项的数目必须与数组大小完全匹配,也可以使用在同一行中声明并初始化 C# 数组: int[] arr1Line = ; 此语法创建一个数组,其大小等于初始值设定项的数目 。在程序循环中初始化 在 C# 中初始化数组的另一个方法是使用 for 循环 。下面的循环将数组的每个元素都设置为零: int[] TaxRates = new int[5]; for (int i=0; i<TaxRates.Length; i++) TaxRates[i] = 0; } 交错数组 在下面的交错数组中,第一行有四项 , 而第二行有三项: int[][] jaggedArray = new int[2][]; jaggedArray[0] = new int[4]; jaggedArray[1] = new int[3]; 多维数组 使用以下语法声明多维矩形数组: int[,] arr2D; float[,,,] arr4D; 声明之后,可以按如下方式为数组分配内存: arr2D = new int[5,4]; 然后,可以使用以下语法访问数组的元素: arr2D[4,3] = 906; 由于数组是从零开始的,因此此行将第四行第五列中的元素设置为 906 。初始化 可以使用以下一种方法,在同一个语句中创建、设置并初始化多维数组: int[,] arr4 = new int [2,3] ,}; int[,] arr5 = new int [,] ,}; int[,] arr6 = ,}; 以上引用别人的答案,自己删除了一些内容;以下属于个人对数组的添加:动态数组:添加using System.Collections.ArrayList;声明:ArrayList a = new ArrayList();赋值:a.Add(object value);//object value可以是任何类型数值插入值:a.Insert(int index,object value);//int index在第几个索引插入值;object value可以是任何类型数值;将动态数组转换为字符串数组:string[] aa=new string[a.Count];for(int i=0;i<a.Count;i++)aa[i] = a[i].ToString();}由于当c语言调用的时候 , 实际传给b函数的是数组a的地址(也就是a的指针),所以数组会被修改 。额外定义一个变量例如 w=a[i];a[i]=a[j];a[j]=w;可以实现a[i] 和a[j]的互换【c 传引用,谁能说一下C语言参数传值和传引用是什么概念谢谢】
4,在c语言编程中传值方式和传引用方式之间有什么区别在C语言中,并没有引用的概念,这个是C++的概念 。在C++的函数参数中,有两种形式,其中TYPE&var的形式,称为传引用方式;TYPEvar的形式 , 称为传值 。二者的区别为,当传引用时,实际传到函数中的形参,是实际参数的一个引用,而不是仅传递值到函数中 。具体的表现有以下几条:1传引用时 , 形参和实参是同一个变量,即使用相同的内存空间,二者有相同的地址 。而传值时二者地址不同;2传引用时 , 由于没有新建变量,所以对于类对象参数,不会产生构造和析构 。而如果是传值调用,调用时会进行构造,退出函数时会进行析构;3由于传引用使用的是原本实参的地址,所以对引用参数值的修改,会在退出函数后体现在主调函数中 , 而传值调用对参数的修改不会影响到主调函数 。你应该知道什么是引用吧,比如inta=1;int&b=a;这样就是引用,这样也表示a就是b,b就是a 。函数调用传参时,如函数B(intc),当调用函数B(a),这样就表示c=a=1;这样只是表示c的值为1,a只是给它赋值了,它只是等于1,与a没有关系了 。但是如果调用B(int&c);,这样就表示int&c=a=1;这样不仅仅表示c等于1了,因为是传引用,这样C就是a,a就是c,你在函数B里面对c进行任何操作,同时对a也进行了相应的操作 。传值方式:当一个函数是传值方式的时候,你调用这个函数的时候传入的实参的值会被拷贝到形参,但是形参与实参之间并没有什么联系,比如变量b=5,a=b;这个时候将b赋值给a,他们的值相等,但是当这以后无论a的值怎么改变都不会影响到b,b=5,a=b;a=1;这时候b依然是5 , 这就是传值方式#includevoid add(int a,int b) { a=a+b;//改变了形参a的值 return a; } void main() { int a=1,b=2; printf("%d\n",add(a,b));//3 printf("%d\n",a);//1 printf("%d\n",b);//2 } 传引用方式: 当你调用一个函数时,传入的是实参的地址的时候 , 这时候修改形参,实参也会受到影响,不过这种传地址某种意义是传值,首先将实参的地址拷贝到形参,他们两个以后就没有关系了,你也可以改变形参保存的地址,实参的地址不会改变,但是你操作的是形参对应地址的内容,与实参对应地址的内容一致,操作是同一个对象,所以形参对这个地址的操作,在实参那里也会看到效果 #include void add(int *a,int *b) { *a=*a+*b;//改变了形参a的值 return *a; } void main() { int a=1,b=2; printf("%d\n",add(&a,&b));//3 printf("%d\n",a);//3 printf("%d\n",b);//2 }传值方式:当一个函数是传值方式的时候,你调用这个函数的时候传入的实参的值会被拷贝到形参,但是形参与实参之间并没有什么联系,比如变量b=5,a=b;这个时候将b赋值给a , 他们的值相等,但是当这以后无论a的值怎么改变都不会影响到b,b=5,a=b;a=1;这时候b依然是5 , 这就是传值方式#include<stdio.h>void add(int a,int b)a=a+b;//改变了形参a的值return a;}void main()int a=1,b=2;printf("%d\n",add(a,b));//3printf("%d\n",a);//1printf("%d\n",b);//2}传引用方式:当你调用一个函数时,传入的是实参的地址的时候,这时候修改形参,实参也会受到影响 , 不过这种传地址某种意义是传值,首先将实参的地址拷贝到形参,他们两个以后就没有关系了 , 你也可以改变形参保存的地址,实参的地址不会改变,但是你操作的是形参对应地址的内容 , 与实参对应地址的内容一致,操作是同一个对象,所以形参对这个地址的操作,在实参那里也会看到效果#include<stdio.h>void add(int *a,int *b)*a=*a+*b;//改变了形参a的值return *a;}void main()int a=1,b=2;printf("%d\n",add(&a,&b));//3printf("%d\n",a);//3printf("%d\n",b);//2}
推荐阅读
- 电脑测速软件
- 京东上的金佳佰业HDMI高清线咋样啊,有用过的吗?深圳市金佳佰业科技有限公司怎么样?
- 如何查找总服务器的地址? 总服务器地址怎么查询
- 全画幅
- 平板有什么编程软件,安卓系统平板能用的编程软件有吗
- mysql索引的作用和优缺点 mysql索引有什么特点
- 迷你u盘,有什么迷你型的U盘大家有什么好介绍的啊
- java web ide,java IDE是什么
- 易语言操作mysql教程 易语言查询mysql记录