精华内容
下载资源
问答
  • c语言指针形参和实参
    2020-04-06 16:19:51

    形参导致实参改变

    在形参导致其实参改变即为其在传递时进行的是双向的值传递,就是说在函数进行两个变量之间的交换的时候是值在交换,而不是指针指向的地址在交换。例如:

    int main()
    {
    int i=8,j=9;
    int *p,*q;
    p=i;//将i的地址赋给指针变量p
    q=j;//将j的地址赋给指针变量q
    void change(int *p,int *q);//互换i,j的值的函数
    change(p,q);
    }
    
    void change(int *p,int *q)
    {
    int temp;
    temp=*p;//进行p,q值的替换,此时i,j也发生了变化
    *p=*q;
    *q=temp;
    }

    而如果将change函数变为下边的情况的话,变化的就为指针指向的地址,并未改变i,j的值

    形参不改变实参值的情况

    void change(int *p,int *q)
    {int *t;
    t=p;
    p=q;
    q=t;
    }
    更多相关内容
  • C语言形参和实参详解及实例代码

    千次阅读 2021-05-21 00:39:44
    C语言形参和实参详解及实例代码形式参数实际参数函数的参数分为形参和实参两种。在本小节中,进一步介绍形参实参的特点两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用...

    C语言中形参和实参详解及实例代码

    形式参数和实际参数

    函数的参数分为形参和实参两种。在本小节中,进一步介绍形参、实参的特点和两者的关系。形参出现在函数定义中,在整个函数体内都可以使用,离开该函数则不能使用。实参出现在主调函数中,进入被调函数后,实参变量也不能使用。形参和实参的功能是作数据传送。发生函数调用时,主调函数把实参的值传送给被调函数的形参从而实现主调函数向被调函数的数据传送。

    函数的形参和实参具有以下特点:

    1.形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只有在函数内部有效。函数调用结束返回主调函数后则不能再使用该形参变量。

    2.实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使实参获得确定值。

    3.实参和形参在数量上,类型上,顺序上应严格一致,否则会发生类型不匹配”的错误。

    4.函数调用中发生的数据传送是单向的。即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

    【例】可以说明这个问题。

    ">#include

    int add(int num)

    {

    int i;

    for(i=0;i<100;i++)

    {

    num=num+i;

    }

    printf("num=%d\n",num);

    }

    int main()

    {

    int num;

    printf("输入一个数\n");

    scanf("%d",&num);

    add(num);

    printf("n=%d\n",num);

    return 0;

    }

    本程序中定义了一个函数add,该函数的功能是求num+i的累加值。在主函数中输入num值,并作为实参,在调用时传送给add函数的形参量nuum。在主函数中用printf语句输出一次n值,这个num值是实参num的值。在函数add中也用printf语句输出了一次n值,这个num值是形参最后取得的n值0。从运行情况看,输入num值为6。即实参num的值为6。把此值传给函数add时,形参num的初值也为6,在执行函数过程中,形参num的值变为4956。返回主函数之后,输出实参num的值仍为6。可见实参的值不随形参的变化而变化。

    感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

    时间: 2017-05-19

    6b5aa0751a6f1e6a9d0b665a02cc1f46.gif

    C语言/C++怎样产生随机数:这里要用到的是rand()函数, srand()函数,和time()函数. 需要说明的是,iostream头文件中就有srand函数的定义,不需要再额外引入stdlib.h;而使用time()函数需要引入ctime头文件. 使用rand()函数获取一个随机数如果你只要产生随机数而不需要设定范围的话,你只要用rand()就可以了:rand()会返回一随机数值, 范围在0至RAND_MAX 间.RAND_MAX定义在stdlib.h, 其值为2147483647. 例子

    1)字符串操作 strcpy(p, p1) 复制字符串 strncpy(p, p1, n) 复制指定长度字符串 strcat(p, p1) 附加字符串 strncat(p, p1, n) 附加指定长度字符串 strlen(p) 取字符串长度 strcmp(p, p1) 比较字符串 strcasecmp忽略大小写比较字符串strncmp(p, p1, n) 比较指定长度字符串 strchr(p, c) 在字符串中查找指定字符 strrchr(p, c) 在字符串中反向查找 strstr(p, p1

    指向结构体类型变量的使用首先让我们定义结构体:struct stu{char name[20];long number;float score[4];} ;再定义指向结构体类型变量的指针变量:struct stu *p1, *p2 ;定义指针变量p 1.p 2,分别指向结构体类型变量.引用形式为:指针变量→成员:[例7-2] 对指向结构体类型变量的正确使用.输入一个结构体类型变量的成员,并输出. 复制代码 代码如下: #include /*使用m a l l o c (

    1.字符数组的定义与初始化字符数组的初始化,最容易理解的方式就是逐个字符赋给数组中各元素.char str[10]={ 'I',' ','a','m',' ','h','a','p','p','y'};即把10个字符分别赋给str[0]到str[9]10个元素如果花括号中提供的字符个数大于数组长度,则按语法错误处理:若小于数组长度,则只将这些字符数组中前面那些元素,其余的元素自动定为空字符(即 '\0' ). 2.字符数组与字符串在c语言中,将字符串作为字符数组来处理.(c++中不是)在实际应用

    fopen(打开文件)相关函数 open,fclose表头文件 #include定义函数 FILE * fopen(const char * path,const char * mode);函数说明 参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态.mode有下列几种形态字符串:r 打开只读文件,该文件必须存在.r+ 打开可读写的文件,该文件必须存在.w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失.若文件不存在则建立该文件.w

    每当想找哪个运算符优先级高时,很多时候总是想找的就没有,真让人气愤!现在,终于有个我个人觉得非常全的,分享给大家,欢迎拍砖! C语言运算符优先级 优先级 运算符 名称或含义 使用形式 结合方向 说明 1 [] 数组下标 数组名[常量表达式] 左到右 -- () 圆括号 (表达式)/函数名(形参表) -- . 成员选择(对象) 对象.成员名 -- -> 成员选择(指针) 对象指针->成员名 -- 2 - 负号运算符 -表达式 右到左 单目运算符 ~ 按位取反运算符 ~表达式 ++ 自增运算符 +

    [程序1]题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 2.程序源代码: 复制代码 代码如下: #include "stdio.h"#include "conio.h"main(){  int i,j,k;  printf("\n");  for(i=1;i<5;i++) /*以下为三重循环*/

    总在写 总在错, 面试也还忘记 学习就是这么个过程, 温故才知新, 望自己谨记 忘记不要紧 复习就好 //排序是有很多种方法的 ,完成从小到大的排列 复制代码 代码如下: #include void sort(int *a,int len){int i=0; int j; int t;    for(i=0;ia[

    记得以前在大学里学习c语言的时候,刚开始是很吃力的. 入门级别的算法中有个叫冒泡排序法,也有称为气泡排序法.那时候刚接触它就对它的名字特别感兴趣,因为觉得很有意思.好了,废话不多说了,我们先一起简单回忆下这个冒泡排序法. 一.打印行和列一般是这样的一个简单代码,输出4行4列*: for(int i = 1,i < 5,i++){ for(int j = 1,j < 5,j++){ printf("*"); } printf("n\"); } 二.打印&q

    任务代码: 数字的排序: #include #define SIZE 10 int main() { int a[SIZE]={12 ,43,9,13,67,98,101,89,3,35};//十个数的无序数列 int i,j,t; printf("此程序使用冒泡排序法排列无序数列!\n"); //冒泡排序 for(i=0;i<10-1;i++)//n个数的数列总共扫描n-1次 { for(j=0;j<10-i-1;j++)//每一趟扫描到a

    前几天遇到的一道关于算法的考题,要求用PHP语言实现对一个数组进行排序,我写了一个采用冒泡排序法的函数,和大家分享一下. //冒泡排序法 function bubble_sort($array) { $count = count($array); if($count <= 0) { return false; } for($i=0; $i$i; $k--) { if($array[$k] < $a

    很基础的东西,感觉代码还不够简洁,希望高手指导修改 复制代码 代码如下: <?php function BubbleSort($str){ for($i=0;$i=$i;$k--){//将这个值向前冒泡: if($str[$k+1]

    a5d5cbb83c8f811335a1f61526fc080b.png

    本文实例讲述了JavaScript实现的冒泡排序法及统计相邻数交换次数.分享给大家供大家参考,具体如下:

    JS冒泡排序
    展开全文
  • C语言中关于形参和实参的传递分为两种:值传递地址传递。地址传递又分为:参数为指针变量,参数为引用类型,参数为数组名。我们可以这样想实参的传递过程:将主函数中所有参数(包括要调用的实参)作为地面上的...

    在C语言中关于形参和实参的传递分为两种:值传递和地址传递。地址传递又分为:参数为指针变量,参数为引用类型,参数为数组名。我们可以这样想实参的传递过程:将主函数中所有参数(包括要调用的实参)作为地面上的实际数值占用内存,将要调用的实参复制一份并修改为形参名字飘到空中形成形参。这样来分析形参和实参的数值改变问题就很简单了。

    例题:

    72419932e4e3c7234ea099e7b8349464.png

    在此题中,地面上的所有参数为a,b,p1,p2,要调用的实参为指针变量p1,p2,将其复制一份修改其名字为m,n飘到空中形成形参,调用函数中只对形参m,n有作用,不影响地面上的参数,所以a,b,p1,p2的值都不变,输入5 3输出为5.0000 3.0000 5.0000 3.0000。但是在下面的例题中:

    4cf38474ef23013ff51e9dec076a1538.png

    同理将地面参数和空中参数表示好,此时,*m表示的是辐射到地面上的参数a,所以*m的改变会引起原参数a的改变,同理b会改变。因为a和b的互换实质是内存空间的交换,所以p1和p2应该是一个整体,即p1还是指向a的,p2还是指向b的。所以p1和p2也互换。

    结论:在参数传递过程中,当按地址传递参数时,形参的变化可能会引起实参的变化。

    推论:

    e6d54d5e46d6dca98ea51fe9ebf05de4.png

    将参数全部传递,同理,此时地面参数为a,b,p1,p2,空中的参数为m,n,q,p,按道理说a,b应该不交换了,但是结果还是交换了。这是因为没有规定天空中m和q,n和p的关系,加上m=&q,n=&p后a,b就不交换了。

    5f3d1c604e9c0e01741fab462ac75ca8.png

    展开全文
  • C语言指针形参和实参

    千次阅读 2016-11-04 15:12:28
    C语言中的形参&实参 记住这条基本原理:形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始化。例如这样调用: void print_time(int hour, int minute) { printf("%d:%d\...

    C语言中的形参&实参

    变量:

    当你声明一个变量时候,系统会给你分配一块内存,这个内存也会有一个地址;

    不论是全局变量还是局部变量,作用域和生命周期可能不一样外,只有类型的不一样,别基本属性是一样的,就是一个变量;

    也没有所谓的指针变量,只是这个变量的类型是个指针而已,他也是分配一块内存,有自己的地址,长度是int,只是他的数据是某块的地址;

    所以你要是想通过参数修改数据,只能传入该变量的地址,然函数体取到对应的地址,对地质内的数据操作,如果只传入变量,相当于就是函数体的局部变量,作用域在该函数体内,函数体结束时,生命周期结束;

    //一下是网络收集的资料辅助理解;

    记住这条基本原理:形参相当于函数中定义的变量,调用函数传递参数的过程相当于定义形参变量并且用实参的值来初始化。例如这样调用:

    void print_time(int hour, int minute) { printf("%d:%d\n", hour, minute); } int main(void) { int h = 23, m = 59; print_time(h, m); return 0; }

    相当于在函数print_time中执行了这样一些语句:

    int hour = h; int minute = m; printf("%d:%d\n", hour, minute);

    main函数的变量h和print_time函数的参数hour是两个不同的变量,只不过它们的存储空间中都保存了相同的值23,因为变量h的值赋给了参数hour。同理,变量m的值赋给了参数minute。C语言的这种传递参数的方式称为Call by Value。在调用函数时,每个参数都需要得到一个值,函数定义中有几个形参,在调用时就要传几个实参,不能多也不能少,每个参数的类型也必须对应上。

    在定义函数中指定的形参,在未出现函数调用时,他们并不占内存中的存储单元。只有在发生函数调用时,函数max中的形参才被分配内存单元。在调用结束后,形参所占的内存单元也被释放。

    实参可以是常量、变量和表达式,但要求有确定的值。在调用时将实参的值赋给形参。

    在C语言中,实参向形参的数据传递是值传递,单向传递,只由实参传给形参,而不能由形参传给实参。在内存中,实参单元和形参单元是不同的单元。在调用函数时,给形参分配存储单元,并将实参对应的值传递给形参,调用结束后,形参单元被释放,实参单元仍保留原值。

    指针变量作函数参数也要遵循这一规则。不可能通过调用函数来改变实参变量的值,但可以改变实参指针变量所指变量的值。

    函数的形参和实参具有以下特点:

    1.形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。

    2.实参可以是常量、变量、表达式、函数等, 无论实参是何种类型的量,在进行函数调用时,它们都必须具有确定的值, 以便把这些值传送给形参。 因此应预先用赋值,输入等办法使实参获得确定值。

    3.实参和形参在数量上,类型上,顺序上应严格一致, 否则会发生“类型不匹配”的错误。

    4.函数调用中发生的数据传送是单向的。 即只能把实参的值传送给形参,而不能把形参的值反向地传送给实参。 因此在函数调用过程中,形参的值发生改变,而实参中的值不会变化。

    #include <stdio.h>
    #include <string.h>

    void swap_a(int a ,int b)

    {

    a ^= b;
    b^= a;
    a^=b;

    }

    void swap(int *a,int*b)

    {

    *a = 20;
    *b = 10;

    }

    int main()

    {

    int a=10 ;
    int b = 20;
    int x = 10;
    int y = 20;
    swap_a(x,y);


    swap(&a,&b);//

    printf("a:%d,b:%d,x:%d,y:%d",a,b,x,y);

    getchar();

    return 0;


    }

    结果:a:20,b:10,x:10,y:20

    分析:swap(x,y)形式参数,可以理解为该函数的局部变量,调用结束内存释放,实参可以传递给形参,形参不可以传递给实参;

    swap(&a,&b);实参为地址,*a = 20;*b =10;该函数处理的是地址,即使子函数释放所有内存,地址上的值已经变化,所以可以传出来,,

    以上案例,是自己总结





    展开全文
  • c语言形参实参的关系 形参实参的值得副本,实参形参传值是单向的。例如:在main( )函数中定义的a,b无法通过调用swap( a, b)函数交换a,b的值。 如果参数类型是指针类型,则可以通过对指针变量所指向的地址...
  • c语言形参和实参传递的区别

    千次阅读 多人点赞 2019-02-28 10:52:49
    参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理返回的过程。参数传递有3种方式: 值传递 地址传递 引用传递 tips: 被调用函数的形参只有函数被调用时...
  • C语言形参实参

    2021-02-04 18:14:04
    形参实参 1.形参和实参是什么 2.形参和实参的区别 3.形参实参知识点 3.1实参的值不随形参的变化而...今天我们来说下c语言形参实参的区别,形参实参理解的话也很简单,但是好多同学关于这个知识点都是一知.
  • C语言--形参和实参

    2021-01-10 21:14:09
    形参实参 C语言参数出现在两个地方–函数定义处、函数调用处。 函数定义处的参数是形式参数,只用在函数...在被调函数中,若通过形参指针改变指针指向地址的值时,实参的值会被修改。 #include <stdio.h> int
  • C语言学习---通过指针形参修改实参的值/交换两个数字的值---原理深究
  • 形参和实参之间的三种传递方式

    千次阅读 2021-05-24 07:03:51
    //形参和实参之间的三种传递方式void fun(int i){ i++;}void fun(int &i){ i++;}void fun(int *i){ *i=*i+1;}若指针指向的是数组的首地址,则数组元素的访问方式1.数组名[i] 指针名[i]2.*(数组名+i) *(指针名+i)...
  • C语言中函数形参实参的区别

    千次阅读 2021-10-02 22:56:10
    众所周知一个函数有两种参数,即形参和实参。那么究竟什么是形参什么是实参呢? 形参:在定义函数时指定的参数,在未出现函数调用时,他们并不占用内存中的存储...在c语言中,实参形参的数据传递是“值传递”,单...
  • C语言形参实参详解

    万次阅读 多人点赞 2019-01-29 15:27:56
    今天我们来说下c语言形参实参的区别,形参实参理解的话也很简单,但是好多同学关于这个知识点都是一知半解,没有真正的去透彻,在真正引用的时候还会出现很多问题,而百度的时候又会说看不懂,所以我们今天来做...
  • 参数传递有3种方式:值传递 地址传递 引用传递tips:被调用函数的形参只有函数被调用时才会临时分配存储单元,一旦调用结束占用的内存便会被释放 值传递和地址传递,传递的都是实参的一个拷贝 C语言实参和形参之间...
  • C语言,函数形参实参个数不一致问题 ​ 最近阅读工程代码的时候,同一个函数,不同场景调用时,输入的实参个数不一样,但是编译却没有问题。查看函数的定义,相关的C文件里并没有给形参指定默认值,这就很奇怪了...
  • C语言形参实参详解

    2020-04-06 15:55:57
    形参可以看做是一个占位符,它没有数据,只能使用其函数被调用时,才会接收值,将实参值传递给形参实参 函数被调用时给出的实际参数包含了实际数据,会被函数内部使用,该实际参数即为实参形参实参的传递 在...
  • 因为形参实参不是同一变量,修改实参不影响形参,修改形参不影响实参 代码执行的时候,a,b 传送给 i,j 此时 i=3,j=5 互换之后 i=5,j=3 但是并不影响 a, b 的值,函数中的 i、j 在使用过之后内存就会释放。 #...
  • 文章目录例题分析实参形参修改分析传值传址传值调用传址调用 讲解知识点之前,我们先来做一道题! 例题 写一个函数可以交换两个整形变量的内容 例如: 交换前:20 30 交换后:30 20 题目让我们用函数的方式写 ...
  • C语言形参和实参不符 #include #include struct contact { char phone[20]; char email[20]; }; struct person_plus { char name[20]; char gender[20]; double height; double weight; }; void change(struct ...
  • 一、实参形参都不是指针,通过修改形参的值来改变实参的值 结果:不可以改变实参的值 #include<stdio.h> int swap(int a,int b) { int temp; temp = a; a = b; b = temp; return 0; } int main() { ...
  • 指针实现函数形参改变实参 在普通情况下,定义一个带有形参的子函数之后,当调用函数调用该子函数时,实参的值只是复制给形参,再参与子函数里面的数值运算,但原实参的值并不会改变, 举个栗子 #include <...
  • 当函数需要用形参改变实参时,简单的传值不能解觉问题。这时就需要使用指针解决问题。 例:int a=10;b=20;要求写一个函数将a,b的值互换。 错误代码: 1. //交换失败,原因a,b仅仅只是赋值,main中的aSwap中的a不是...
  • 在这个过程中,我们大多会给这个函数传递某些‘参数’,当我们定义被调用函数时,函数名后的括号( )中即为我们传入的“形参”,函数可以在函数体中描述如何操作这些“形参”;同时,我们调用函数时,例如 fun(param1...
  • 数组做形参和实参总结

    千次阅读 2021-02-23 20:31:49
    指针数组和数组指针,二维数组二级指针作为形参和实参 C语言学习笔记——指针、数组作为函数参数传递的方式 在一维数组中,数组名表示的是数组第一个元素的地址。 C语言调用函数时采用“值传递”方式,当用变量...
  • C语言函数的形参实参之间的区别,函数的调用
  • 就是定义函数的时候,写在函数名小括号后面的参数叫形参实参:实际参数。就是调用函数的时候,调用函数时写在函数名小括号后面的参数就叫实参2).注意项a.实参既可以放常量,也可以放变量,还可以放表达式;形参:它...
  • 关于指针 32位编译器下指针字节数恒为4字节 ...关于C语言的内存分配 栈区空间:在函数{}内部定义的变量称为局部变量,系统将局部变量内存分配在栈区,函数调用完毕后此块内存便被销毁。这里所谓的销...
  • c语言指针变量的实参形参

    千次阅读 多人点赞 2019-03-13 12:21:45
    最近遇到一个坑,让我对实参和形参有了更深的了解。 假如在main方法中有一个指针变量p,它指向的内存地址为20000。现在将它传递到一个函数中,在这个函数里让它指向内存地址为20048。当函数执行完返回到main函数时...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,435
精华内容 10,574
关键字:

c语言指针形参和实参