| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 523 人关注过本帖
标题:關於指標的問題
只看楼主 加入收藏
btopcst
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2005-9-26
收藏
 问题点数:0 回复次数:4 
關於指標的問題

#include<iostream.h> #include<stdio.h> #include<stdlib.h> typedef unsigned char uint8_t;

struct yuv2rgb_factory_s { int gamma; int entry_size; uint8_t *table_rV[256]; uint8_t *table_gU[256]; uint8_t *table_bU[256]; }; void main(void) { yuv2rgb_factory_s *c_this; c_this->entry_size=4; c_this->gamma=10; for (int i = 0; i < 256; i++) { *c_this->table_rV[i] += c_this->entry_size*(20- c_this->gamma); *c_this->table_gU[i] += c_this->entry_size*(20 - c_this->gamma); *c_this->table_bU[i] += c_this->entry_size*(20 - c_this->gamma); } } 這段程序…我編譯ok了…但是執行有問題… 請問一下是什麼問題…那要怎麼改呢?? 能否給我個答案…謝謝

搜索更多相关主题的帖子: include 
2005-09-26 22:07
russilong
Rank: 1
等 级:新手上路
帖 子:23
专家分:0
注 册:2005-8-23
收藏
得分:0 
好像是主函数中for循环的问题,等式左右都含有i,这样会无限递归。

2005-09-27 10:52
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
btopcst, 你的问题是因为你对指针没有真的掌握。要真的掌握了指针,就应该知道指针没什么可怕的,它只是一个地址而已,在这个地址下将存放一个数据。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 再强调一遍,指针只是一个地址而已。 我想你现在对指针是一个地址这句话是不会忘记了。 好,下面就来展开来说。 抛开你上面的那段代码。我们来看下面一行代码: int * p; 好了问题来了,当计算机执行到上面那行代码时,计算机里发生了什么事?如果你清楚这一点,那你就对指针了如指掌了。 我来告诉你答案, 当 int *p;这行代码执行到的时候,计算机将开辟一个4个Byte的空间用于存放一个地址值。而这个空间内,当前为空。如果你要操作这个地址值,就是一种违规行为。也就是说,当前的 p 是个野指针。 一般一个很规矩的程序员,比如像我, 都会为指针变量赋初值为 NULL, 所以好的代码就应该是 int * p = NULL; 这样p 就是一个空指针,也就是说,计算机在执行到 int * p = NULL; 这条语句时,开辟一个四个Byte 的空间,并在这个空间内赋初值为零。 那么怎样才能合法应用这个地址变量p 呢?回答是,当你为这个p 赋予了某个值时,它才能被应用。 比如通过 new 开辟一个空间,然后让那个空间的首地址值赋予p, 这样p 就有一个地址值了,这样我们就可以访问这个地址了,而访问这个地址就意味着你可以读,也可以写数据到这个地址下。 下面说个具体一点的例子: int * p = new int; 当计算机执行到上面这行代码时,发生如下的事情。 1)为p 开辟一个 4个Byte的空间(为了方便说明,我称它为空间 A), 当然它本身也有地址。 我们假设这个空间的首地址为1000, 这个时候,这个空间内还没有赋予初值。 2)开辟一个4个Byte 的空间(空间B),这个空间内只能放 integer 类型的变量,当前也没有在这个空间内赋初值,我们假设这个空间的首地址为3000。 3)将3000这个地址值放入空间A,这样在空间A里面就有了一个地址值。这就意味着,p 认识了空间B, 也就是说我们可以访问空间B, 从而读或写数据到空间B 怎么来读呢? 很简单, 比如 int a = *p; 这样我们就读了空间B内的数据. 怎么来写呢? 也很简单, 比如 *p = 108; 这样我们就将108 这个数写到了空间B内. 我想你现在应该清楚指针的操作了. 那么你一楼的代码为什么出错,你自己可以明白了. 还不明白再问。当你明白之后,再看一下,我的这段帖子。 最后,再重复一遍,指针只是一个地址而已,没有赋初值的指针是野指针。

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-27 12:06
dxlwjt5188
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2005-9-27
收藏
得分:0 
其实这个问题就是混淆了指针和指针变量!!!!!!!!!!!!!!!
2005-09-27 20:51
kai
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:52
帖 子:3450
专家分:59
注 册:2004-4-25
收藏
得分:0 
dxlwjt5188, 不对,不对. 看来大家真的是有点木讷了, 非得我具体说到源程序不可. 你们看 yuv2rgb_factory_s *c_this; 这个 c_this 赋初值了吗? 没有. 既然没有, 那么 c_this 表示了哪个地址呢? 所以看到了, 这样的指针便是野指针. 这样的指针不可以做操作处理. 所以 c_this->entry_size=4; 就不对了.

自由,民主,平等,博爱,进步.
中华民国,我的祖国,中华民国万岁!中华民国加油!
本人自愿加入中国国民党,为人的自由性,独立性和平等性而奋斗!
2005-09-28 03:59
快速回复:關於指標的問題
数据加载中...
 
   



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

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