| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2322 人关注过本帖
标题:函数类型的形参.c和.cpp的一点区别
取消只看楼主 加入收藏
MeandC
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:8
帖 子:245
专家分:792
注 册:2018-7-14
结帖率:100%
收藏
 问题点数:0 回复次数:1 
函数类型的形参.c和.cpp的一点区别
先说一下.cpp的吧,这是c++文件的后缀,但是也是可以写C语言的,编c程序我也是用cpp后缀的,是因为我一开始写的时候书上传变量值得时候是用地址符的,然后我用.c为后缀,然后编译器报错,我也不知道错哪儿啊,先看一下用栈转化成二进制数的一个程序。
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
    int *base;
    int *top;
    int stacksize;
}stack;
int initstack(stack &s) {
    s.base = (int*)malloc(sizeof(int) * 20);
    if (!s.base)exit(-2);
    s.top = s.base;
    s.stacksize = 20;
    return 1;
}
int push(stack &s, int e) {
    if (s.top == s.base + s.stacksize) {
        s.base = (int*)realloc(s.base, sizeof(int) * 10);
        if (!s.base)exit(-2);
        s.top = s.base + s.stacksize;
        s.stacksize += 10;
    }
    *s.top++ = e;
    return 1;
}
int pop(stack  &s, int &e) {
    if (s.base == s.top)return 0;
    e = *--s.top;
    return 1;
}
void conversion(int num) {
    int n;
    stack s;
    initstack(s);
    while (num) {
        push(s, num % 2);
        num /= 2;
    }
    while (s.top != s.base) {
        pop(s, n);
        printf("%d", n);
    }
    printf("\n");
}
int main()
{
    int m;
    printf("请输入要测试的组数:");
    scanf_s("%d", &m);
    int i, num;
    for (i = 0; i < m; i++) {
        scanf_s("%d", &num);
        conversion(num);
    }
    system("pause");
    return 0;
}

看一下形参里面就是地址符,这样调用函数中值的改变主函数中也会变的
图片附件: 游客没有浏览图片的权限,请 登录注册

然后看一下把.cpp改成.c后的结果是编译前就报错了,看一下
图片附件: 游客没有浏览图片的权限,请 登录注册

改成了.c后就得改了,一开始一头雾水的,不过还是写好了,看一下代码
程序代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct {
    int *base;
    int *top;
    int stacksize;
}stack;
int initstack(stack *s) {
    s->base = (int*)malloc(sizeof(int) * 20);
    if (!s->base)exit(-2);
    s->top = s->base;
    s->stacksize = 20;
    return 1;
}
int push(stack *s, int e) {
    if (s->top == s->base + s->stacksize) {
        s->base = (int*)realloc(s->base, sizeof(int) * 10);
        if (!s->base)exit(-2);
        s->top = s->base + s->stacksize;
        s->stacksize += 10;
    }
    *s->top++ = e;
    return 1;
}
int pop(stack  *s, int *e) {
    if (s->base == s->top)return 0;
    *e = *--s->top;
    return 1;
}
void conversion(int num) {
    int n;
    stack s;
    initstack(&s);
    while (num) {
        push(&s, num % 2);
        num /= 2;
    }
    while (s.base != s.top) {
        pop(&s, &n);
        printf("%d", n);
    }
    printf("\n");
}
int main()
{
    int m;
    printf("请输入要测试的组数:");
    scanf_s("%d", &m);
    int i, num;
    for (i = 0; i < m; i++) {
        scanf_s("%d", &num);
        conversion(num);
    }
    system("pause");
    return 0;
}

图片附件: 游客没有浏览图片的权限,请 登录注册


同一个c程序代码,c文件里形式参数不能带地址符,而c++文件能带地址符,而能带地址符是很方便的,调用函数是只需要写变量就好了,自定义函数也更好写。
你们在.c和.cpp这两的程序里面看到这样子有什么样的想法和观点,欢迎评论。代码是vs2017写的。
搜索更多相关主题的帖子: int base top stack num 
2018-10-27 23:17
MeandC
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:8
帖 子:245
专家分:792
注 册:2018-7-14
收藏
得分:0 
回复 2楼 Mr_doge
简单的说一个是利用指针传值,一个是直接引用吧。

C果然是有点难啊!
2018-11-21 18:16
快速回复:函数类型的形参.c和.cpp的一点区别
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018337 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved