美文网首页
C语言值传递与址传递

C语言值传递与址传递

作者: 玉宾 | 来源:发表于2020-08-10 21:09 被阅读0次

    高考过后,你不用告诉我你考多少分,悲喜之后也不要告诉我你志愿填了哪里,只要告诉我最后去了哪?我坐火车或飞机要多久,在此停留能否蹭口饭吃,一本二本我真的分不清楚,我只知道你是我朋友。。。

    ----  网易云热评

    一、值传递,形参的修改不会影响到实参

    #include <stdio.h>

    void jiaohuan(int a,int b) {

           int tmp = a;

           a = b;

           b = tmp;

           printf("a=%d,b=%d", a, b);

    }

    int main() {

           int m = 1;

           int n = 2;

           jiaohuan(m, n);

           printf("m=%d,n=%d", m, n);

           system("pause");

           return 0;

    }

    运行结果:

    二、址传递,传递变量的地址

    #include <stdio.h>

    void jiaohuan(int *a,int *b) {

           int tmp = *a;

           *a = *b;

           *b = tmp;

    }

    int main() {

           int m = 1;

           int n = 2;

           jiaohuan(&m, &n);

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

           system("pause");

           return 0;

    }

    运行结果:m=2,n=1

    三、形参中的数组,不是数组,就是普通的指针

    void aiyou(int a[])

    void aiyou(int *a)

    void aiyou(int a[10])

    上面三个函数的参数都表示形参是一个数组

    void aiyou(char *p[])

    void aiyou(char ** p)

    void aiyou(char *p[10])

    上面三个函数的参数都表示形参是一个指针数组

    四、查找字符串出现的次数

    #include <stdio.h>

    int main() {

           char* p = "13aiyou4565aiyou870aiyou867456aiyou2345";

           int i = 0;//计数器

           char* tmp = NULL;

           while (1) {

    //查找匹配的字符串,找打返回地址

                  tmp = strstr(p, "aiyou");

                  if (tmp==NULL)

                  {

                         break;//跳出循环

                  }

                  else

                  {

                         i++;//找到后+1;

                         p = tmp + strlen("aiyou");//找到后,指针从下一处开始找

                  }

           }

           printf("aiyou出现的次数:%d\n", i);

           system("pause");

           return 0;

    }

    运行结果:aiyou出现的次数:4

    五、去首尾空

    #include <stdio.h>

    #include <string.h>

    int main() {

           char* p = "         aiyoubucuo        ";

           printf("源数据:%s\n", p);

           char* s = p;//首元素地址

    char* w = p + strlen(p) - 1;//尾元素地址

           //去首空,首地址不为且没有到尾地址

           while (*s==' '&&*s!='\0')

           {

                  s++;

           }

           //去尾空,尾地址不为空且没有到首地址

           while (*w==' '&& *w!=p)

           {

                  w--;

           }

           int n = w - s + 1;

           printf("去首尾空后的长度:%d\n", n);

           char a[100] = "aaaaaaaaaaaaaaaaaaa";

           strncpy_s(a, strlen(a), s,n);

                  a[n] = 0;

           printf("去首尾空结果:%s\n", a);

           system("pause");

           return 0;

    }

    欢迎关注公众号:顺便编点程

    相关文章

      网友评论

          本文标题:C语言值传递与址传递

          本文链接:https://www.haomeiwen.com/subject/aoksdktx.html