c语言函数读取指针 C语言指针指向函数

c语言,函数里的指针问题?

这个其实很好理解

创新互联是一家专注于网站制作、成都网站设计与策划设计,荆门网站建设哪家好?创新互联做网站,专注于网站建设十年,网设计领域的专业建站公司;建站业务涵盖:荆门等地区。荆门做网站价格咨询:18982081108

只需要把%s,%c,%p放在一起看

首先%s是最常见的很好理解,就是告诉程序后面的变量是一个字符串,在C语言中也就是字符数组,类型是char*或者char[],换句话说,你告诉程序我会给你一个指针,你去读这个指针指向的值。

然后%c是告诉程序后面的变量是个字符,类型是char,差别已经很明显了,这时候你告诉程序我给你提供一个字符,你给我在%c处打印出来。然而你给的却是一个指针,那程序就直接把你给的指针指向的地址本身当成字符打印出来了。但是一个地址肯定不止一个字节,也就是说超过了char应该有的大小,这时候程序会直接忽略了超出大小的部分,只读第一个字节。

如果你同时使用%p,告诉程序,你会提供一个指针,直接把这个指针指向的地址给我打印出来。把输出的地址最后两位的16进制数查ascii表,换算成字符,你会发现,刚好就是前面%c打印出的字符。

C语言-函数指针

/*

函数指针,关键是后面两个字“指针”,顾名思义,是一个指向函数的指针

原理:函数在创建好了后,函数的代码会在内存中占有个位置,这时我们创造一个指针来指向这个地址,这个指针就叫函数指针

函数指针不可以移动,想要移动指针的位置来指向函数的下一个指令的想法是错误的

函数指针的要求,

1,首先这个指针,要和函数的返回类型一样

2,指针的*和名字,要用小括号括起来//不括起来就是指针函数了,意思就变成,函数返回一个指针了

3,最右边的小括号里形参位置的类型,形参的个数,也要和函数定义时的形参一致,只要类型,不要形参名即可,

但是加上形参名也可以,没毛病,看上去也更清晰

*/

#include

void swapchar(char *a, char *b)

{

char t;

t = *a;

*a = *b;

*b = t;

}

void swapchar2(char * a2, char * b2)

{

printf("this is swapchar2");

}

int main(void)

{

char chf = 'a', chg = 'j';

void(*p)(char * a, char * b);//定义函数指针、形参名字a、b可有可无,但有的话看上去更清晰,只要函数定义的类型、参数类型、以及参数个数,与这个指针一致,那么这个指针p,就可以指向它

p = swapchar;//p指针接管swapchar函数,只要给函数名字,就可以给过去了

printf("chf=%c,chg=%c ", chf, chg);

p(chf, chg);

printf("chf=%c,chg=%c ", chf, chg);

p = swapchar2;//这里把swapchar2函数的地址,给了p,这时p从swapchar地址,转移到了swapchar2这里。

p(chf,chg);

return 0;

}

c语言读取文件指针问题,循环条件while(!feof(fp))什么意思?

"r".为读而打开文本文件.(不存在则出错)

"rb".为读而打开二进制文件

while(!feof(fp))

文件到尾判断

最常用的文件使用方式及其含义如下:

"r".为读而打开文本文件.(不存在则出错)

"rb".为读而打开二进制文件.

"w".为写而打开文本文件.(若不存在则新建,反之,则从文件起始位置写,原内容将被覆盖)

"wb".为写而打开二进制文件.

"a".为在文件后面添加数据而打开文本文件.(若不存在,则新建;反之,在原文件后追加)

"ab".为在文件后面添加数据而打开一个二进制文件.

"r+".为读和写而打开文本文件.(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变)

"rb+".为读和写而打开二进制文件.只是在随后的读写时,可以由位置函数设置读和写的起始位置.

"w+".首先建立一个新文件,进行写操作,随后可以从头开始读.(若文件存在,原内容将全部消失)

"wb+".功能与"w+"同.只是在随后的读写时,可以由位置函数设置读和写的起始位置.

"a+".功能与"a"相同;只是在文件尾部添加新的数据后,可以从头开始读.

"ab+".功能与"a+"相同;只是在文件尾部添加新数据之后,可以由位置函数设置开始读的起始位置.

C语言指针的写入读出

你的里面是有语法错误的

对你fwtite函数的使用没有正确使用

这个不是靠for循环实现多次读入的

具体的用法:

int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

fwrite()函数从数组buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流. 返回值是已写的对象的数量.

然后你的里面还是应用了for循环

#include "stdio.h"

struct student_type

{

char name[10];

int num;

int age;

char addr[15];

}stud[2];

void save()

{

FILE *p;

int num;

if((p=fopen("FILE.txt","wb"))==NULL)

{

printf("open error\n");

return;

}

//int fwrite( const void *buffer, size_t size, size_t count, FILE *stream );

//fwrite()函数从数组buffer(缓冲区)中, 写count个大小为size(大小)的对象到stream(流)指定的流. 返回值是已写的对象的数量.

/*

for(i=0;i2;i++)

if ( fwrite(stud[i],sizeof(struct student_type),1,p)!=1)

printf("data error\n");

*/

num = fwrite(stud, sizeof(struct student_type), 2, p);

fclose(p);

}

void main()

{

int i;

printf("请输入数据:\n");

for(i=0;i2;i++)

{

scanf("%s",stud[i].name);

scanf("%d",stud[i].num);

scanf("%d",stud[i].age);

scanf("%s",stud[i].addr);

}

save();

struct student_type stud1[2];

FILE *fp;

fp=fopen("FILE.txt","rb");

fread(stud1,sizeof(struct student_type),2,fp);

for (i = 0; i 2; i++)

{

printf("%s\t",stud1[i].name);

printf("%d\t",stud1[i].age);

printf("%d\t",stud1[i].num);

printf("%s\t",stud1[i].addr);

printf("\n");

}

fclose(fp);

}

至于fwrite好像是对数值型的写入有点不一样,就算是直接以“w”格式写入也是会出现不是直接看到数值


本文名称:c语言函数读取指针 C语言指针指向函数
浏览路径:http://ybzwz.com/article/hejgge.html