指针在函数之间传址的有关问题。多谢
指针在函数之间传址的问题。。。求助,谢谢
当时看书的时候感觉还好,可是一上手做自己的例子就不行了。。是一个读raw图像并统计灰度直方图的。
第一个程序是把功能都写在主函数的,没什么问题,编译执行都正确。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,j;
FILE *fp; //指向文件的指针
fp=fopen("Lena.raw","rb"); //打开文件。注意raw格式图像要以只读二进制流的形式打开
if(!fp)
{
printf("ERROR!\n");
}
unsigned char *pData=new unsigned char[256*256]; //注意:raw图像用无符号char型读入
fread(pData,sizeof(unsigned char),(256*256),fp); //fread具体用法见msdn
fclose(fp); //取消fp指针指向
int value[256]={0}; //声明并初始化存灰度值的数组
for(i=0;i<(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
printf("灰度值\t\t大小"); //
printf("\n");
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");//
for(j=0;j<256;j++) //将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
fprintf(fp,"%d\t\t%d\r\n",j,value[j]);
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
}
下面是我写得把读,处理,写分成三个函数,企图通过pData指针传递地址的程序,编译倒是通过了但是没有任何结果出来。
就好像程序什么都没做一样。。。。
#include<stdio.h>
#include<stdlib.h>
int value[256];
int fread(unsigned char *pData)
{
FILE *fp;
fp=fopen("Lena.raw","rb");
if(!fp)
{
printf("Read ERROR!\n");
}
pData=new unsigned char[256*256];
fread(&pData,sizeof(unsigned char),(256*256),fp);
fclose(fp);
return *pData; //这个return一直不太明白,返回1还是0还是参数?
}
int fchuli(unsigned char *pData)
{
for(int i=0;i<(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
return *pData; //
}
int fwrite(unsigned char *pData)
{
FILE *fp;
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");
for(int j=0;j<256;j++) //将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
//fprintf(fp,"%d\t\t%d\r\n",j,value[j]);
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
return value[256];
}
int main(unsigned char *Data)
{
int fread(unsigned char *pData);
int fchuli(unsigned char *pData);
int fwrite(unsigned char *pData);
return 0;
}
------解决方案--------------------
三个函数,参数pdata,都不是值传递,
函数结束时,不会有变化。
原因,是在函数内部,pdata会被复制成另外一个变量,所有操作都是对这个变量进行的。
除非你把指针作为值传递,或者是将指针地址返回。
简单一点说,就是外部传递的pdata和函数内部的pdata不是同一个地址
------解决方案--------------------
我只能说你基础差的很远
帮你改了一下
#include<stdio.h>
#include<stdlib.h>
int value[256]={0};
int fread0(unsigned char *pData)
{
FILE *fp;
fp = fopen("Lena.raw","rb");
if(!fp)
{
printf("Read ERROR!\n");
}
//pData=new unsigned char[256*256];
fread(&pData,sizeof(unsigned char),(256*256),fp);
fclose(fp);
return 0; //这个return一直不太明白,返回1还是0还是参数?
}
int fchuli0(unsigned char *pData)
{
for(int i=0;i<(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
return 0; //
}
int fwrite0(unsigned char *pData)
{
FILE *fp;
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");
for(int j=0;j<256;j++) //将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
fprintf(fp,"%d\t\t%d\r\n",j,value[j]);
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
return value[256];
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char *pData=new unsigned char[256*256];
当时看书的时候感觉还好,可是一上手做自己的例子就不行了。。是一个读raw图像并统计灰度直方图的。
第一个程序是把功能都写在主函数的,没什么问题,编译执行都正确。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int i,j;
FILE *fp; //指向文件的指针
fp=fopen("Lena.raw","rb"); //打开文件。注意raw格式图像要以只读二进制流的形式打开
if(!fp)
{
printf("ERROR!\n");
}
unsigned char *pData=new unsigned char[256*256]; //注意:raw图像用无符号char型读入
fread(pData,sizeof(unsigned char),(256*256),fp); //fread具体用法见msdn
fclose(fp); //取消fp指针指向
int value[256]={0}; //声明并初始化存灰度值的数组
for(i=0;i<(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
printf("灰度值\t\t大小"); //
printf("\n");
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");//
for(j=0;j<256;j++) //将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
fprintf(fp,"%d\t\t%d\r\n",j,value[j]);
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
}
下面是我写得把读,处理,写分成三个函数,企图通过pData指针传递地址的程序,编译倒是通过了但是没有任何结果出来。
就好像程序什么都没做一样。。。。
#include<stdio.h>
#include<stdlib.h>
int value[256];
int fread(unsigned char *pData)
{
FILE *fp;
fp=fopen("Lena.raw","rb");
if(!fp)
{
printf("Read ERROR!\n");
}
pData=new unsigned char[256*256];
fread(&pData,sizeof(unsigned char),(256*256),fp);
fclose(fp);
return *pData; //这个return一直不太明白,返回1还是0还是参数?
}
int fchuli(unsigned char *pData)
{
for(int i=0;i<(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
return *pData; //
}
int fwrite(unsigned char *pData)
{
FILE *fp;
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");
for(int j=0;j<256;j++) //将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
//fprintf(fp,"%d\t\t%d\r\n",j,value[j]);
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
return value[256];
}
int main(unsigned char *Data)
{
int fread(unsigned char *pData);
int fchuli(unsigned char *pData);
int fwrite(unsigned char *pData);
return 0;
}
------解决方案--------------------
三个函数,参数pdata,都不是值传递,
函数结束时,不会有变化。
原因,是在函数内部,pdata会被复制成另外一个变量,所有操作都是对这个变量进行的。
除非你把指针作为值传递,或者是将指针地址返回。
简单一点说,就是外部传递的pdata和函数内部的pdata不是同一个地址
------解决方案--------------------
我只能说你基础差的很远
帮你改了一下
#include<stdio.h>
#include<stdlib.h>
int value[256]={0};
int fread0(unsigned char *pData)
{
FILE *fp;
fp = fopen("Lena.raw","rb");
if(!fp)
{
printf("Read ERROR!\n");
}
//pData=new unsigned char[256*256];
fread(&pData,sizeof(unsigned char),(256*256),fp);
fclose(fp);
return 0; //这个return一直不太明白,返回1还是0还是参数?
}
int fchuli0(unsigned char *pData)
{
for(int i=0;i<(256*256);i++) //统计灰度值
{
value[pData[i]]++;
}
return 0; //
}
int fwrite0(unsigned char *pData)
{
FILE *fp;
fp=fopen("result.txt","wb");
fprintf(fp,"灰度值\t\t大小\r\n");
for(int j=0;j<256;j++) //将结果输出到txt中
{
printf("%d\t\t%d\n",j,value[j]);
// fwrite(value,sizeof(int),256,fp);
fprintf(fp,"%d\t\t%d\r\n",j,value[j]);
}
delete[] pData;//删除空间
fclose(fp); //关闭txt文件
return value[256];
}
int _tmain(int argc, _TCHAR* argv[])
{
unsigned char *pData=new unsigned char[256*256];