#include<stdio.h>
#define SIZE_X 3
#define SIZE_Y 3
struct point_2d
{
int x;
int y;
};
struct Image
{
int data_[SIZE_Y][SIZE_X];
int size_x_;
int size_y_;
int default_value_;
void(*image_)(Image*,int);
void(*set_value)(Image*,point_2d,int);
int(*get_value)(Image*,point_2d);
void(*image_print)(Image*);
};
void image(Image* img,int default_value);
void set_value(Image* img,point_2d pt,int value);
int get_value(Image* img,point_2d pt);
void image_print(Image* img);
int main(){
Image img{};
img.image_=image;
img.image_(&img,0);
img.image_print(&img);
img.set_value(&img,point_2d{2,1},1);
img.image_print(&img);
printf("(%d,%d)= %d\n",2,1, img.get_value(&img,point_2d{2,1}));
}
void set_value(Image* img,point_2d pt,int value){
if(pt.x>img->size_x_||pt.x<0||pt.y>img->size_y_||pt.y<0){
printf("pt error!\n");
return;
}
img->data_[pt.y][pt.x]=value;
}
/*!
*
* @param img 你的描述
* @param pt 你的描述
* @return 你的描述
* @note 你的描述
*/
int get_value(Image* img,point_2d pt)
{
if(pt.x>img->size_x_||pt.x<0||pt.y>img->size_y_||pt.y<0)
{
printf("pt error!\n");
return -1;
}
return img->data_[pt.y][pt.x];
}
void image_print(Image* img)
{
printf("size_x = %d,size_y = %d \n",img->size_x_,img->size_y_);
printf("data is: \n");
for (int y=0;y<img->size_y_;y++)
{
for(int x=0;x<img->size_x_;x++)
printf(" %d", get_value(img,point_2d{x,y}));
printf("\n");
}
printf("\n");
}
void image(Image* img,int default_value)
{
img->default_value_=default_value;
img->size_y_=sizeof(img->data_)/sizeof(img->data_[0]);
img->size_x_=sizeof(img->data_[0])/sizeof(img->data_[0][0]);
img->get_value=get_value;
img->set_value=set_value;
img->image_print=image_print;
for (int y=0;y<img->size_y_;y++)
for(int x=0;x<img->size_x_;x++)
img->set_value(img,point_2d{x,y},img->default_value_);
}
如何按图中要求去理解这个C语言代码并给出注释和理解文字
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
3条回答 默认 最新
- 技术专家团-小桥流水 2022-10-10 09:46关注
函数功能注释如下:
#include<stdio.h> #define SIZE_X 3 #define SIZE_Y 3 struct point_2d { int x; int y; }; struct Image { int data_[SIZE_Y][SIZE_X]; int size_x_; int size_y_; int default_value_; //这部分都是函数指针 void (*image_)(Image*, int); void (*set_value)(Image*, point_2d, int); int(*get_value)(Image*, point_2d); void(*image_print)(Image*); }; //声明函数 void image(Image* img, int default_value); void set_value(Image* img, point_2d pt, int value); int get_value(Image* img, point_2d pt); void image_print(Image* img); int main() { Image img{};//声明Image类型的img实例 img.image_ = image; //设置img实例的函数指针 img.image_(&img, 0); //相当于image(&img,0);初始化img实例 img.image_print(&img);//打印img图像的值 img.set_value(&img, point_2d{ 2,1 }, 1); //设置img图像在点(2,1)处的值为1 img.image_print(&img); //打印img图像的值 printf("(%d,%d)= %d\n", 2, 1, img.get_value(&img, point_2d{ 2,1 })); } /*! * @param img 需要操作的图像指针 @param pt 需要修改数据的点坐标 @param value 点上需要更新的数据 @return 无 @note 将img图像上点pt位置的值更改为value */ void set_value(Image* img, point_2d pt, int value) { //判断点pt的坐标是否在img图像范围内,如果不在,退出 if (pt.x > img->size_x_ || pt.x<0 || pt.y>img->size_y_ || pt.y < 0) { printf("pt error!\n"); return; } img->data_[pt.y][pt.x] = value; //将img图像上点pt位置的值更改为value } /*! * @param img 需要操作的图像指针 @param pt 需要获取数据的图像上的点坐标 @return img图像上点pt所在的值 @note 获取img图像上点pt处的值 */ int get_value(Image* img, point_2d pt) { //判断点pt的坐标是否在img图像范围内,如果不在,返回-1 if (pt.x > img->size_x_ || pt.x<0 || pt.y>img->size_y_ || pt.y < 0) { printf("pt error!\n"); return -1; } return img->data_[pt.y][pt.x];//返回img图像上点pt处的值 } /*! * @param img 需要操作的图像指针 @return 无 @note 显示整个图像的值 */ void image_print(Image* img) { printf("size_x = %d,size_y = %d \n", img->size_x_, img->size_y_); printf("data is: \n"); //双层for循环遍历img图像 for (int y = 0; y < img->size_y_; y++) { for (int x = 0; x < img->size_x_; x++) printf(" %d", get_value(img, point_2d{ x,y })); printf("\n"); } printf("\n"); } /*! * @param img 图像指针 @param default_value 默认大熊啊 @return 无 @note 初始化图像实例 */ void image(Image* img, int default_value) { //用img初始化Image的各元素 img->default_value_ = default_value; img->size_y_ = sizeof(img->data_) / sizeof(img->data_[0]); img->size_x_ = sizeof(img->data_[0]) / sizeof(img->data_[0][0]); img->get_value = get_value; img->set_value = set_value; img->image_print = image_print; //双层for循环赋值 for (int y = 0; y < img->size_y_; y++) for (int x = 0; x < img->size_x_; x++) img->set_value(img, point_2d{ x,y }, img->default_value_); }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 2无用
悬赏问题
- ¥20 测距传感器数据手册i2c
- ¥15 RPA正常跑,cmd输入cookies跑不出来
- ¥15 求帮我调试一下freefem代码
- ¥15 matlab代码解决,怎么运行
- ¥15 R语言Rstudio突然无法启动
- ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
- ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
- ¥15 用windows做服务的同志有吗
- ¥60 求一个简单的网页(标签-安全|关键词-上传)
- ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法