C语言函数的形参问题
8个回答
展开全部
形参.在C中有两种传递方式:数值传递和指针传递
数值传递,就是你说的第一种情况,使用的是原数据的拷贝,而非原数据,一个简单的例子:
void swap( int a , int b)
{
int temp = a;
a = b;
b = temp;
}
在其他函数中调用swap(x,y).是不会交换x,y的值的
指针传递:就是你说的第二种,数组名是指针类型的..学到后面你会明白,指针保存的是数据的地址,你可以这么理解,通过这个地址,可以找到实际的数据,对这块地址进行间访操作就可以操作实际的数据
void swap( int *a , int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
调用swap(&x,&y) 可以交换x,y的值
数值传递,就是你说的第一种情况,使用的是原数据的拷贝,而非原数据,一个简单的例子:
void swap( int a , int b)
{
int temp = a;
a = b;
b = temp;
}
在其他函数中调用swap(x,y).是不会交换x,y的值的
指针传递:就是你说的第二种,数组名是指针类型的..学到后面你会明白,指针保存的是数据的地址,你可以这么理解,通过这个地址,可以找到实际的数据,对这块地址进行间访操作就可以操作实际的数据
void swap( int *a , int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
调用swap(&x,&y) 可以交换x,y的值
展开全部
形参传递的是值,参数并且参与计算时,并没有调用修改该参数,而是先把参数的值复制到内存的另一个地方,修改的是复制后的那个地址所对应的值,故原值不变。。而数组a[]中,a其实质就是指针,指向的是该数组第一个成员,参与计算时,相当于修改了实参,所以值会变得/
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为数组是不定长的,这导致没法向函数正确传递数组。
所以,如果是传数组的话,统一的只是传递数组首地址,也就是指针,子函数里通过该指针找到数组里的数据,所以修改里面的数就是修改了原来的数。记住,数组参数是传指针来实现的
而一般参数则是直接把数据入栈,相当于把数据作了一份拷贝,把拷贝传给了子函数
所以,如果是传数组的话,统一的只是传递数组首地址,也就是指针,子函数里通过该指针找到数组里的数据,所以修改里面的数就是修改了原来的数。记住,数组参数是传指针来实现的
而一般参数则是直接把数据入栈,相当于把数据作了一份拷贝,把拷贝传给了子函数
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2011-05-04
展开全部
int clear(List *&L);中
List *&L 是一个指针引用, c语言中没有引用的概念。这是c++的语法。
1) int clear(List *L); 传入指针,能保留函数对L指向的内存所做的修改。指针L本身不会被改变,它仍指向同一块内存。
2) int clear(List *&L); 传入指针引用,能保留函数对L指向的内存所做的修改。与1)不同的是,指针本身也可以保留函数对它的改变,而去指向另一片内存
3) int clear(List L); 传入结构变量的一个副本,所以,函数对参数L所做的修改,在函数退出后不会被保留。 L不会被改变。
另外,团IDC网上有许多产品团购,便宜有口碑
List *&L 是一个指针引用, c语言中没有引用的概念。这是c++的语法。
1) int clear(List *L); 传入指针,能保留函数对L指向的内存所做的修改。指针L本身不会被改变,它仍指向同一块内存。
2) int clear(List *&L); 传入指针引用,能保留函数对L指向的内存所做的修改。与1)不同的是,指针本身也可以保留函数对它的改变,而去指向另一片内存
3) int clear(List L); 传入结构变量的一个副本,所以,函数对参数L所做的修改,在函数退出后不会被保留。 L不会被改变。
另外,团IDC网上有许多产品团购,便宜有口碑
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
首先要知道,参数传递是要压栈的
简单示意说明下
如 void test (int y)
{
y = 3;
}
这样操作的
void test(int y)
{
int _y = y;
_y = 3;
}
意思是说函数中执行的实话,已经不是传入的参数了,而是一个副本
只修改了副本,y没有改变
而传指针
void test (int *y)
{
int* _y = y;
*_y = 3;
}
改_y地址的内容即是改y地址的内容
简单示意说明下
如 void test (int y)
{
y = 3;
}
这样操作的
void test(int y)
{
int _y = y;
_y = 3;
}
意思是说函数中执行的实话,已经不是传入的参数了,而是一个副本
只修改了副本,y没有改变
而传指针
void test (int *y)
{
int* _y = y;
*_y = 3;
}
改_y地址的内容即是改y地址的内容
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询