嗨我对如何访问结构的成员有一些疑问,如果结构是通过某个函数的引用来重新获取的。
这是一个生成随机"图像的程序"并有两个我的问题的例子:
#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;
}
我的问题是:
1)发送到scanf函数的参数应该是什么? (忘了缓冲区清理问题,是的,我知道我可以将结构的maxvalue成员发送到&#34; setimagemaxvalue&#34;函数,但这只是一个例子,我想知道怎么做它认为它是一个结构的成员。
2)我怎么能写出函数&#34; createimage&#34;不使用tmp变量(指针img引用指针像素,它引用数据)。
答案 0 :(得分:1)
1)关于scanf的参数
scanf ("%d", &((*img).maxvalue));
是读取值的正确方法。 或者你也可以使用
scanf ("%d", &(img->maxvalue));
同样,如果您认为以后更具可读性,则可以将(*img).pixels
替换为img->pixels
。
2)您可以用tmp
img->pixels
的所有出现
答案 1 :(得分:-1)
首先写一下:'通过引用收到'。 ,但你实际上是通过指针传递struct。 其他人已表明你可以使用 - &gt;这是使用指针时寻址成员的正确方法。
但我认为在你的情况下(看看主要)你会更好地通过引用传递。 e.g。
void setimagemaxvalue (image &img)
{
scanf ("%d", &(img.maxvalue);
}
你可以使用这种方式。而不是 - &gt; 在你的主要部分看起来像这样:
image img;
....
setimagemaxvalue( img );
img前面没有&符号
祝你好运 Asger-P