c语言指针传递引用传递
1. 请问在c语言中,函数传参时怎样利用指针传递数组
数组名就是指针,例如:
#include <stdio.h>
voidpr(char *p)
{
printf(p);
}
void main(void)
{
char s[] = "abc";
pr(s);
}
(1)c语言指针传递引用传递扩展阅读:
注意事项
非数组类的声明尽量以指针的方式进行比较好。倘若一个指针指向的内存并不是一个数组,那么采用数组名的声明方式或许就会给人产生错误的引导。类似的,如果指向的是一个数组区域,则会给人以更加丰富的信息。例如:
int main(int argc,char* argv[])
{
/* code here */
}
与
int main(int argc,char** argv)
{
/* code here */
}
两种方式完全等价,但是前面一种能够更清晰地看出:这个参数是指向某个元素起始地址的指针,而后面的这种方式则不能够直观地看出这种含义。
2. C语言中的参数传递方式有哪些
是函数参数的传递方式吧。c语言的话是:值传递和指针(地址)传递。c++的话除了c语言的两种方式外还有引用传递。
3. 在c语言中,指针作为函数参数,形参只能传递值,而不能传递地址,是怎么回事
C语言中,函数参数只能传值。与传值对应的是传引用,C语言不支持函数参数传引用,C++语言才支持。
C++传引用函数:
void foo(int& a) { a = 3; }
假如a = 2,执行foo(a)后,a = 3。
---
C语言可以模拟传引用,方法是通过指针来实现:
void foo2(int* ap) { *ap = 3; }
假如a = 2,执行foo2(&a)后,a = 3
foo2(&a)调用本质上仍然是传值,只不过传递的是指针,指针即是地址,地址本质上是一个无符号整数。
如果:
void foo3(int b) { b = 3; }
假如a = 2,执行foo3(a)后,a = 2。这是因为foo3(a)调用过程中,a值传给形参b,修改b的值与实参a无关。
注意到,foo3(a)与上述foo(a)传引用的调用是形式一样的。
既然C语言通过指针可以实现传引用调用,为什么C++还要引入引用这个特性呢?这是因为C++引入的很多新特性需借助引用来实现,比如,拷贝构造函数等等。
4. c语言,返回函数的三种方法,请解释明白点,有例子更好了
函数参数和
返回值
三种传递方式:值传递、指针传递和引用传递
引用与指针的比较
引用是
C++中的概念,初学者容易把引用和指针混淆一起。一下程序中,n
是m
的一个引用(
reference
),m
是被引用物(referent)。
int
m;
int
&n
=
m;
n
相当于m
的别名(绰号),对n
的任何操作就是对m
的操作。所以n
既不是m
的拷贝,也不是指向m
的指针,其实n
就是m
它自己。
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
对比上述三个示例程序,会发现“引用传递”的性质象“指针传递”,而书写方式象“值传递”。实际上“引用”可以做的任何事情“指针”也都能够做,为什么还要“引用”这东西?
答案是“用适当的工具做恰如其分的工作”。
5. C/C++语言-指针与引用的区别
一、指针:
1.指针的定义:
指针作为实体,是一个用来保存一个内存地址的计算机语言中的变量。指针一般出现在比较底层的程序设计语言中,如C语言。高层的语言如Java一般避免用指针,而是引用。
指针作为数据类型,可以从一个函数类型、一个对象类型或者一个不完备类型中导出。从中导出的数据类型称之为被引用类型(referenced type)。指针类型描述了一种对象,其值为对被引用类型的实体的引用。
2.* 和 &符号
这个时候能改变a的值,而
改为
就无法改变a的值。
在执行inc(&a);时,系统在内存分配表里增加了一行“inc 中的val”,其地址为新地址,值为&a。操作*val,即是在操作a 了。
二.引用
1.引用的定义:
(1)引用就是某个目标变量的“别名”,对应用的操作与对变量直接操作效果完全相同。
(2)申明一个引用的时候,切记要对其进行初始化。
2.引用的特点:
(1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
(2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
(3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更容易使用,更清晰。