C 访问通过引用接收的结构的成员

C 访问通过引用接收的结构的成员,c,pointers,struct,reference,C,Pointers,Struct,Reference,您好,我对如何访问结构的成员有一些疑问,如果该结构是由某个函数通过引用接收的 下面是一个生成随机“图像”的程序,其中有两个我的问题示例: #include <stdio.h> #include <stdlib.h> #include <time.h> #define WIDTH 16 #define HEIGHT 8 typedef struct { int width; int height; int maxvalue;

您好,我对如何访问结构的成员有一些疑问,如果该结构是由某个函数通过引用接收的

下面是一个生成随机“图像”的程序,其中有两个我的问题示例:

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define WIDTH 16
#define HEIGHT 8

typedef struct
{
    int width;   
    int height; 
    int maxvalue;
    char *pixels;
} image;


void setimagemaxvalue (image *img)
{

    scanf ("%d", &((*img).maxvalue); //I know is wrong 

}

void createimage (image *img) //just creates a random matrix of pixels
{
        (*img).pixels=malloc((img->width)*(img->height));

        int i,j;

    char *tmp;
    tmp=(*img).pixels;

    for (i=0;i<(img->height);i++)
        {
        for (j=0;j<(img->width);j++)
        {
            *(tmp+(i*(img->width)+j))=(char)(rand()%(img->maxvalue));
        }

    }   

}



int main ()
{
    srand(time(NULL));
    image img;

    img.width=WIDTH;
    img.height=HEIGHT;

    setimagemaxvalue(&img);
    createimage (&img);

    return 0;
}
#包括
#包括
#包括
#定义宽度16
#定义高度8
类型定义结构
{
整数宽度;
内部高度;
int最大值;
字符*像素;
}形象;
void setimagemaxvalue(图像*img)
{
scanf(“%d”),&((*img.maxvalue);//我知道是错的
}
void createimage(image*img)//只创建像素的随机矩阵
{
(*img).pixels=malloc((img->width)*(img->height));
int i,j;
char*tmp;
tmp=(*img).像素;
对于(i=0;iheight);i++)
{
对于(j=0;jwidth);j++)
{
*(tmp+(i*(img->width)+j))=(char)(rand()%(img->maxvalue));
}
}   
}
int main()
{
srand(时间(空));
图像img;
img.宽度=宽度;
img.height=高度;
setimagemaxvalue(&img);
创建图像(&img);
返回0;
}
我的问题是:

1) 发送给scanf函数的参数应该是什么? (忘记缓冲区清理问题,是的,我知道我可以将结构的maxvalue成员发送到“setimagemaxvalue”函数,但这只是一个示例,考虑到它是结构的成员,我想知道如何执行

2) 如何在不使用tmp变量的情况下编写函数“createimage”(有一个指针img引用指针像素,它引用数据)。

1)关于scanf的参数

scanf ("%d", &((*img).maxvalue));
是读取值的正确方法。 或者,您也可以使用

scanf ("%d", &(img->maxvalue));
类似地,如果您认为以后更容易阅读,您可以将
(*img).pixels
替换为
img->pixels


2) 您可以将所有出现的
tmp
替换为
img->pixels

您可以先写:“通过引用接收”,但实际上是通过指针传递结构。 其他人已经表明,您可以使用->这是在使用指针时对成员进行寻址的正确方法

但我认为在你的情况下(看main),你最好通过引用来代替。 e、 g

这样你就可以使用它了。而不是-> 大体上,它看起来是这样的:

image img;
....

setimagemaxvalue( img );
img前无符号

致意
Asger-P

为什么你认为它是错的?我看到scanf中有一个括号错误,但我认为它是错的,因为在同一句话中使用星号和符号对我来说似乎很奇怪,现在我知道它不是。对于tmp来说,是的,它工作得很好,谢谢!您使用星号取消对
struct image
类型的对象的引用,并使用符号and获取
int
类型的地址,因此应该可以。你需要它们,如果没有一些技巧,就不能跳过它们。C中没有引用。@Asger-P我想你错了,这样我就向一个需要指针的函数发送了一个结构,无论如何谢谢你的帮助UBS,一定在睡觉,对不起。
image img;
....

setimagemaxvalue( img );