将两个结构传递给C中的相同函数

编程入门 行业动态 更新时间:2024-10-10 01:18:31
本文介绍了将两个结构传递给C中的相同函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想知道如何将两个结构传递给同一个函数。我收到错误

错误:有趣的参数1的不兼容类型

如果我使用两个结构作为相同的类型。 这是代码 我的尝试:

typedef struct首先 { //成员 .... }首先; void fun(第一个f [size]){ //对str1进行一些计算,我想在str2 .... 上进行相同的计算(i = 0; i< 3; i ++){f [i] .member + = 5; } } void cal(第一个str1 [4],第一个str2 [4]){ // str1 的一些计算(i = 0; iNsomesize; i ++){ str2 [i] .member = str1 [i] .member; } fun(str2 [4]); } void main(){ first str1 [4]; first str2 [4]; fun(str1); //我只调用str1,因为首先我要在 // str1 }

解决方案

你需要指针。让我们试一个简单的例子

#include < stdio.h > typedef struct { int x,y; }点; void doubleIt(Point * p) { p-> x = p-> x * 2 ; p-> y = p-> y * 2 ; } void printIt( const Point * p) { printf( {%d,%d} \ n ,p-> x,p-> y); } int main() { Point p1,p2; 点数pa [ 4 ]; int n; p1.x = 1 ; p1.y = 1 ; p2.x = 0 ; p2.y = 2 ; // 访问p1 printIt(& p1) ; doubleIt(& p1); printIt(& p1); // 访问p2 printIt(& p2) ; doubleIt(& p2); printIt(& p1); // 访问pa数组 for (n = 0 ; n< 4; ++ n) { pa [n ] .x = n; pa [n] .y = -n; printIt(& pa [n]); doubleIt(& pa [n]); printIt(& pa [n]); } }

首先,str1不是第一个,它是第一个对象的数组:

第一个str1 [ 4 ];

所以你的方法定义必须匹配它,就像它与 cal 一样。 但这里有问题,因为str2是一个包含4个第一个对象的数组,所以这个:

str2 [ 0 ]。member = fun(str2 [ 4 ]);

尝试访问数组的第五个元素 - C索引从零开始,记住。 如果你正在尝试将第一个实例传递给fun,然后将其声明为

void fun(第一个f) { ... }

并使用元素形式之一调用它:

fun( str1 [ 0 ]); fun(str1 [ 1 ]); fun(str1 [ 2 ]); fun(str1 [ 3 ]); fun(str2 [ 0 ]); fun(str2 [ 1 ]); fun(str2 [ 2 ]); fun(str2 [ 3 ]);

如果你想传递第一个对象的数组:

void fun(first f []){ ... }

并传递数组:

fun(str1); fun(str2);

但不管怎样,这都行不通:

str2 [ 0 ]。member = fun(str2 [ 4 ]);

因为fun是一个void函数 - iut不能返回一个值,所以它可以用在等号的右边。 我想你需要坐下来重读你的课程笔记:你似乎对你在这里要做的事情感到有些困惑。

Hi, I wanted to know how I can pass two structs to the same function. I'm getting an error

error: incompatible type for argument 1 of fun

if I use two structs as the same type. Here is the code What I have tried:

typedef struct First { //members .... }first; void fun( first f[size] ){ // some computation on str1 and I want to applay same computation on str2 .... for(i=0;i<3;i++){ f[i].member +=5; } } void cal(first str1[4],first str2[4] ){ // some calculation on str1 for(i=0;iNsomesize;i++){ str2[i].member=str1[i].member; } fun(str2[4]); } void main(){ first str1[4]; first str2[4]; fun(str1); // I call just str1 because firstly I want to applay fun computation on //str1 }

解决方案

You need pointers. Let's try a simple example

#include <stdio.h> typedef struct { int x, y; } Point; void doubleIt( Point * p ) { p->x = p->x * 2; p->y = p->y * 2; } void printIt( const Point * p) { printf("{%d, %d}\n", p->x, p->y); } int main() { Point p1, p2; Point pa[4]; int n; p1.x = 1; p1.y = 1; p2.x = 0; p2.y = 2; // accessing p1 printIt( &p1); doubleIt(&p1); printIt( &p1); // accessing p2 printIt( &p2); doubleIt(&p2); printIt( &p1); // accessing the pa array for (n = 0; n<4; ++n) { pa[n].x = n; pa[n].y = -n; printIt(&pa[n]); doubleIt(&pa[n]); printIt(&pa[n]); } }

Firstly, str1 is not a first, it's an array of first objects:

first str1[4];

So your method definition has to match that, as it does with cal. But there are problems here, as str2 is an array of 4 first objects, so this:

str2[0].member=fun(str2[4]);

Tries to access a fifth element of teh array - C indexes start at zero, remember. If you are trying to pass a single instance of first to fun, then declare it as

void fun(first f) { ... }

And call it with an element form one of your arrays:

fun(str1[0]); fun(str1[1]); fun(str1[2]); fun(str1[3]); fun(str2[0]); fun(str2[1]); fun(str2[2]); fun(str2[3]);

If you want to pass an array of first objects:

void fun(first f[]) { ... }

And pass it the array:

fun(str1); fun(str2);

But either way, this won't work:

str2[0].member=fun(str2[4]);

Because fun is a void function - iut cannot return a value, so it can;t be used on the right of an equals sign. I think you need to sit down and re-read your course notes: you appear to be a little confused as to what you are trying to do here.

更多推荐

将两个结构传递给C中的相同函数

本文发布于:2023-11-29 04:24:29,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1645264.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:函数   两个   结构

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!