c语言指针格式,c语言 指针

1,c语言 指针你把for循环里的p<(p+10)改为p你的for循环有问题 。判断条件中两边都有变量 p<(p+10)p为正数就相当于 1<(1+10)那是永远不能满足的,除非p为负数了所以要改改int a[10], *p;int i=0;p=&a[0];for(i=0;i<10;i++) scanf("%d", p++);这句有点问题,应该是: for (;p<(a+10);p++)int a[10],*pp=&a;for(;p<(p+10);p++)scanf("%d",p);如果不能正常输入的话enter-----------ctrl+z----------------enter
2,c语言 指针修改如下:#include<stdio.h> void main()void average(float *p,int n);/*注意这里*/void search(float (*p)[3]); /*注意这里*/float score[3][3]=average(&score[0][0],9);/*注意这里*/search(score); } void average(float *p,int n)/*注意这里*/int sum,i,k;for(i=0;i<n/3;i++) /*注意这里*/sum=0;for(k=0;k<3;k++)/*注意这里*/sum=sum+*(p+i*3+k); /*注意这里*/aver=sum/3;printf("average= %5.2f\n",aver);} } void search(float p[][3])/*注意这里*/int i,j,flag;float aver,sum=0;for(i=0;i<3;i++)flag=0;for(j=0;j<3;j++)if(*(*(p+i)+j)<60)flag+=1;if(flag>1)printf("NO.%d fails,his scores are:\n",i+1);for(j=0;j<3;j++)printf(" %5.1f",*(*(p+i)+j));for(j=0;j<3;j++)sum=sum+*(*(p+i)+j);aver=sum/3;printf(" %5.2f\n",aver);}} }
3,c语言 指针#include <stdio.h>int main() int a[10]= for(p=a;p<a+10;p++)//p是指针,批向数组的第一个元素,并将指针移到下一个元素 printf("%d,",*p++);//输出指针所指向的元素的内存,并将指针移到下一个元素 //上面是两次指向一下人元素,也就是说一次循环+2,++在后边是先使用再+1 printf("\n"); for(p=a;p<a+10;p++) printf("%d,",*++p);//++在前边,是先自加再使用 printf("\n"); return 0 ;}for(p=a;p<a+10;p++) //执行之后p的地址加1printf("%d,",*p++); //这句是每次执行之后的p所指向的地址加1,第一次是a[0]的值这样每次循环p的地址加2,所以执行的结果是:1,3,5,7 , 9for(p=a;p<a+10;p++) //执行之后p的地址加1printf("%d,",*++p); //这句是每次执行之前的p所指向的地址加1,第一次是a[1]的值这样每次循环p的地址加2 , 所以执行的结果是:2,4,6,8,0这里主要是*p++和*++p的问题,第一个for循环中p=a=a[0]=1<1+10运行printf语句 输出*p的值然后p值加1(printf语句中的p++),也就是指针指向后一个地址即a[1]=2 , 然后执行p值加1(for括号里的p++),也就是指针指向后一个地址即a[2]=3 , 以此类推输出1,3,5,7,9第二个for循环中p=a=a[0]=1<1+10运行printf语句 p值加1也就是*p指针指向后一个地址即a[1]=2然后输出*p的值(printf语句中的++p),,然后执行p值加1(for括号里的p++),也就是指针指向后一个地址即a[2]=3,以此类推输出2,4 , 6,8,0我也是初学者 , 这是我自己的理解,有些术语还不会说了,希望能这样解释清楚了吧 。第一个循环体中,先输出第1个元素 , 然后再指针后移,在循环计数的地方再后移一次 , 这样下次再输出的时候就是第三个元素了,所以输出下素为奇数的元素;第二个循环体中,先指针后移,然后再输出 , 这样就输出了第二个元素,之后再在循环计数的地方再后移一次,这样下次再输出的时候就是第四个元素了,所以输出下素为偶数的元素;运行结果如下图所示:【c语言指针格式,c语言 指针】
4 , C语言 文件的指针是什么类型FILE* fpc语言文件类型指针是通过file *fp; 这种形式进行定义的 。关于file结构在vc6中有如下定义:#ifndef _file_definedstruct _iobufchar *_ptr; //文件输入的下一个位置int _cnt; //当前缓冲区的相对位置char *_base; //指基础位置(即是文件的起始位置)int _flag; //文件标志int _file; //文件描述符idint _charbuf; //检查缓冲区状况,如果无缓冲区则不读取int _bufsiz; //文件缓冲区大小char *_tmpfname; //临时文件名 };typedef struct _iobuf file;#define _file_defined#endifc程序用不同的file结构管理每个文件 。程序员可以使用文件,但是不需要知道file结构的细节 。实际上,file结构是间接地操作系统的文件控制块(fcb)来实现对文件的操作的,如下图: 上面图中的_file实际上是一个描述符 , 作为进入打开文件表索引的整数 。文件是存放在物理磁盘上的,包括文件控制块(fcb)和数据块 。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息 。数据块用来存储实际的内容 。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据 。相关函数:file *fopen( char *file, char *open_mode ); //打开文件,读文件到内存 , 返回文件信息结构指针int fread( char s, int size, int num, file *fp ); //按字节读取文件内容到s中int fwrite( char s, int size, int num, file *fp ); //按字节将s地址中的数据写到文件中char *fgets( char *s, int max_size, file *fp); //读一行数据到缓冲区s中int fseek( file *fp, long offset, int whence); //移动文件指针到指定位置void rewind(file *fp); //回到文件头long ftell(file *fp); //得到当前文件偏移位置fclose(fp); //关闭文件,刷新缓存到物理磁盘上FILE *fp = fopen(.....)这个好像是C++的语法,C语言好像不可以这么用在前面加上#include <sys/types.h>#include <sys/stat.h>试试如果用的是VC6的话,在前面加个下划线下面的参考资料里面有个例子5,c语言文件类型指针用强制类型转换flag = (unsigned int)(*infile);可以用printf("flag = %d,*infile = %d ", flag, *infile)测试 。补充:上次匆匆忙忙看了你的问题 , 觉得有点奇怪,今天在vc上调了一下,不知道你的编译环境是什么,我在vc6.0上printf("\n %d",*infile); 是一个大整数,应该是一个指针值,理论上也应该如此,infile本来就是一个文件句柄 。看你的需求仿佛是想在读取文件时能知道当前读取的字节数,还是应该用ftell(file *)函数,如果想得到整个文件的大小 , 先移动到文件末尾,然后ftell(),ftell()示例如下,在vc6.0上编译调试通过:#include void main() { char k; file *infile; char in_name[] = "test.txt"; //接收要打开的文件名 infile = fopen(in_name,"rb"); //假设文件能正常打开 while(!feof(infile)) //判断是否文件尾 { printf("%d\n", ftell(infile)); k=fgetc(infile); //读入一个字符 } }c语言文件类型指针是通过FILE *fp; 这种形式进行定义的 。关于FILE结构在VC6中有如下定义:#ifndef _FILE_DEFINEDstruct _iobufchar *_ptr; //文件输入的下一个位置int _cnt; //当前缓冲区的相对位置char *_base; //指基础位置(即是文件的起始位置)int _flag; //文件标志int _file; //文件描述符idint _charbuf; //检查缓冲区状况,如果无缓冲区则不读取int _bufsiz; //文件缓冲区大小char *_tmpfname; //临时文件名 };typedef struct _iobuf FILE;#define _FILE_DEFINED#endifC程序用不同的FILE结构管理每个文件 。程序员可以使用文件 , 但是不需要知道FILE结构的细节 。实际上,FILE结构是间接地操作系统的文件控制块(FCB)来实现对文件的操作的,如下图: 上面图中的_file实际上是一个描述符,作为进入打开文件表索引的整数 。文件是存放在物理磁盘上的,包括文件控制块(FCB)和数据块 。文件控制块通常包括文件权限、日期(创建、读取、修改)、拥有者、文件大小、数据块信息 。数据块用来存储实际的内容 。当打开一个文件时,程序会将物理磁盘上的文件数据块读入到内存,然后通过文件指针的移动读取内存中的文件数据 。相关函数:FILE *fopen( char *file, char *open_mode ); //打开文件,读文件到内存,返回文件信息结构指针int fread( char s, int size, int num, FILE *fp ); //按字节读取文件内容到s中int fwrite( char s, int size, int num, FILE *fp ); //按字节将s地址中的数据写到文件中char *fgets( char *s, int max_size, FILE *fp); //读一行数据到缓冲区s中int fseek( FILE *fp, long offset, int whence); //移动文件指针到指定位置void rewind(FILE *fp); //回到文件头long ftell(FILE *fp); //得到当前文件偏移位置fclose(fp); //关闭文件,刷新缓存到物理磁盘上FILE 类型是一个结构,文件打开成功时,对它作了内存分配和初始化 。文件读写和文件操作有许多程序,除数据读写和转换外还有许多操作,读写和操作既用到FILE结构里的内容,同时也修改和更新与文件有关的信息 。例如fseek,ftell,fgetpos,fsetpos,rewind,这些虽不是读写,但它们操作文件 。文件指针是FILE的一个成员 。

    推荐阅读