c 传递引用,C语言里有引用传递吗

1,C语言里有引用传递吗C不支持引用传递,引用传递属于C++特性 。如果要修改被传递的值,C中只能用指针传递 。引用是面向对象编程语言常用的,c用的是指针
2 , 谁能说一下C语言参数传值和传引用是什么概念谢谢你好,首先纠正一下你的一个错误,C语言里没有引用的概念 。引用就是一个别名,定义一个变量a,再定义一个引用c,即 int &c = a;就是给a变了个别名,实际上是一个实体 。传值就是将变量的值复制一遍,在函数调用栈上使用,还有一个传指针,即传变量地址,就是将变量的地址传到函数栈上去,这样,函数在栈上执行对该变量的操作都会直接操作到原变量的值 。传引用和传指针都能直接改变原变量的值 , 而传值不能修改原变量,只能修改它们的复制品(即在栈上建立的变量并被赋予了传进来的变量的值);C语言只能“参数传值”,没有“引用传递” 。C++有引用传递 。传值就是传递值,引用传递就是传地址,可以形实参数可以同步变化 。你好!传值只是把这个变量的值赋给形参,改变形参的值,实参不变 。传引用时改变形参,实参也会改变 。希望对你有所帮助,望采纳 。【c 传递引用,C语言里有引用传递吗】
3,引用传递C语言题目(47)A解:f1(x)是传值,虽然f2(x)是传参但主函数里调用时f1(a)的并没改变所以是2(48)B解:f1(x)是引用传递,那么f1(x)函数体内调用的f2(x)就没有意义了,也就是说f1(a)只执行了一次相加(47)A(48)B传值方式传过去的只是参数的拷贝,无论在函数中如何改变,都不会改变原参数的值,单引用方式就不同在函数中的任何改变其值的操作都会改变参数的值所以(47)中a还是2(48)中等于2*2等于4首先我想说下,参数传值和引用传值有什么不同之处:若采用参数传值,在调用函数的时候,会将实参复制一遍 , 假设实参存储区域为S,复制一遍后的存储区域M,那么在整个函数的执行过程中,只是对内存区域M中的内容进行操作,而S区域中的值没有发生任何变化 。若采用引用传值,在调试的时候,将不会在对实参进行复制,假设实参存储区域为S , 那么在整个函数的执行过程中,对实参的操作就是对内存区域S的操作 。理解了这个,应该能够很容易选出答案了吧 。希望你能有所收获!呵呵!~~传值调用建立参数的一份拷贝并把它传给调用的函数,在调用函数中修改参数值的拷贝不影响原始的变量值;传引用调用允许调用函数修改原始变量的值 。A B
4 , 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]的互换5,关于C中按引用传递机制这个是我学的时候做的一些自己理解起来比较清楚的笔记, 希望对你有帮助. 建议尽量将编程看成是对内存进行操作, 而不是简单的对变量操作...如果能理解了这些, 应该就没问题了..以下程序中,n 是m 的一个引用(reference),m 是被引用物(referent) 。例如:int m;int &n = m;n 相当于m 的别名(绰号),对n 的任何操作就是对m 的操作 。例如有人名叫王小毛,他的绰号是“三毛” 。说“三毛”怎么怎么的,其实就是对王小毛说三道四 。所以n 既不是m 的拷贝,也不是指向m 的指针,其实n 就是m 它自己 。引用的一些规则如下:(1)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化) 。(2)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL) 。(3)一旦引用被初始化 , 就不能改变引用的关系(指针则可以随时改变所指的对象) 。以下示例程序中,k 被初始化为i 的引用 。语句k = j 并不能将k 修改成为j 的引用 , 只是把k 的值改变成为6 。由于k 是i 的引用,所以i 的值也变成了6 。int i = 5;int j = 6;int &k = i;k = j; // k 和i 的值都变成了6;上面的程序看起来象在玩文字游戏,没有体现出引用的价值 。引用的主要功能是传递函数的参数和返回值 。C++语言中,函数的参数和返回值的传递方式有三种:值传递、指针传递和引用传递 。以下是“值传递”的示例程序 。由于Func1 函数体内的x 是外部变量n 的一份拷贝,改变x 的值不会影响n, 所以n 的值仍然是0 。void Func1(int x)x = x + 10;}……int n = 0;Func1(n);cout << “n = ” << n << endl; // n = 0以下是“指针传递”的示例程序 。由于Func2 函数体内的x 是指向外部变量n 的指针,改变该指针的内容将导致n 的值改变,所以n 的值成为10 。void Func2(int *x)(* x) = (* x) + 10;}……int n = 0;Func2(&n);cout << “n = ” << n << endl; // n = 10以下是“引用传递”的示例程序 。由于Func3 函数体内的x 是外部变量n 的引用,x 和n 是同一个东西 , 改变x 等于改变n,所以n 的值成为10 。void Func3(int &x)x = x + 10;}……int n = 0;Func3(n);cout << “n = ” << n << endl; // n = 10对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象“值传递” 。实际上“引用”可以做的任何事情“指针”也都能够做 , 为什么还要“引用”这东西?答案是“用适当的工具做恰如其分的工作” 。指针能够毫无约束地操作内存中的如何东西,尽管指针功能强大,但是非常危险 。就象一把刀 , 它可以用来砍树、裁纸、修指甲、理发等等,谁敢这样用?如果的确只需要借用一下某个对象的“别名”,那么就用“引用”,而不要用“指针” , 以免发生意外 。比如说 , 某人需要一份证明,本来在文件上盖上公章的印子就行了,如果把取公章的钥匙交给他,那么他就获得了不该有的权利 。如果你把 引用 就当成 指针 呢,,简单地说 , 引用其实就是变量的别名,比如有一个自定义的类Cat:class Catpublic: void Call()private: int height;};有一函数,第(1)种情况:以Cat类型作为参数 。void Test(Cat cat)cat.Call();}第(2)种情况:如果用引用:void Test(Cat &cat)cat.Call();}用引用的好处就是,当参数类型为用户自定义类型或其它类类型时,如果是值传递(第1种情况),就会调用它的构造函数等造成的开销;如果是引用传递(第2种情况),因为引用相当于变量的别名 , 所以指的就是实参,因此不需要调用它的构造函数,可以减少开销 。#include <iostream>using namespace std;void swap(int & a, int & b) inttmp; tmp = a; a = b; b = tmp; }int main() int a = 2, b = 1; swap(a, b); cout << a << "\t" << b <<endl; return 0;} #include <iostream>using namespace std;void swap(inta, intb) inttmp; tmp = a; a = b; b = tmp; }int main() int a = 2, b = 1; swap(a, b); cout << a << "\t" << b <<endl; return 0;} 对比下,然后去调调看结果引用就是实参的别名,任何作用到引用对象上的改变都指向实际被引用的对象本身int a = 1;int&b = a;b = 3; // 等价于a = 3

    推荐阅读