關於指標的問題
#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了…但是執行有問題… 請問一下是什麼問題…那要怎麼改呢?? 能否給我個答案…謝謝









都会为指针变量赋初值为 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内.
我想你现在应该清楚指针的操作了. 那么你一楼的代码为什么出错,你自己可以明白了. 还不明白再问。当你明白之后,再看一下,我的这段帖子。
最后,再重复一遍,指针只是一个地址而已,没有赋初值的指针是野指针。