c语⾔指针实验⼼得与⼩结_C语⾔指针⼩结
指针⼩结——C语⾔
最近发现⾃⼰C语⾔基础还是很薄弱,去⼴图借了本《C指针原理揭秘——基于底层实现机制》深⼊学下指针
命令⾏输⼊参数
⼤家想必都在windows中使⽤过ping 127.0.0.1 -t,其中这些参数怎么来的呢?看下⾯
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char **argv)
{
while(*++argv!=NULL)
printf("%sn",*argv);
return 0;
}
我们平时直接就int main(),⼊⼝参数什么都不填,但在这⾥的(int argc,char **argv)代表了不⼀样的意思
其中argc代表的是输⼊的命令的个数,其中命令本⾝也是参数之⼀,那argc>=1
⽽argv就是⼀个指针,指向参数数组元素,利⽤argv指针特点,可判断参数数组中参数的个数,也就是说循环向后移动argv指针,当指向NULL的时候就代表参数列表结束
上个例⼦中使⽤了解引⽤的操作,就把所有的参数取出来。
常量指针
字符串常量指针
int main(int argc,char **argv)
{
printf("%s","abcdefgh"+2);
return 0;
}
在这⾥运⾏结果就可以得到"cdefgh",字符常量可以直接作为指针基址,加上偏移步长(向右跳过的字符数),可以得到余下的字符串的起始地址。
const指针
1. 指针指向的内容不可变,但指针本⾝可以改变
C const int* a; int const *a;
1. 指针本⾝不能变,指向的内容可以修改
C int* const a;
1. 指针本⾝不能改变,指向的内容也不能改变
C const int* const a;
很多时候很容易混淆,怎么记住呢?主要看const和*的位置。
const在前,*在后,就叫常量指针,顾名思义就是常量的指针,指针指向的是常量咯!
*在前,const灾后,就叫指针常量,顾名思义就是指针是常量,指针是常量咯!
函数指针
1. 函数指针
格式:
返回类型(*函数指针变量名)(参数列表)
如:
int (*myfunc)(int a,int b);
1. 函数指针数组
格式:
返回类型(*函数指针变量名[])(参数列表)
如:
#include <stdlib.h>
int add(int a,int b)
{
return a+b;
}
int sub(int a,int b)
c语言指针实验总结{
return a-b;
}
int main(int argc,char **argv)
{
int (*operate_func[])(int,int)={add,sub};
int myresult=0;
int oper=atoi(*++argv);
printf("%dn",oper);
int mynum;
while(*++argv!=NULL)
{
mynum=atoi(*argv);
printf("%d ",mynum);
myresult=operate_func[oper](myresult,mynum);
}
printf("n%dn",myresult);
return 0;
}
第⼀个元素operate_func[0]指向add函数的起始地址
第⼆个元素operate_func[1]指向sub函数的起始地址
⽂件指针
函数介绍
fopen
r 只能从⽂件中读数据,该⽂件必须存在,否则打开失败
w 只能向⽂件写数据,⽂件不存在则创建它,存在则先删除它然后再重建⼀个新⽂件
a 向⽂件增加新数据(不删除原有数据),若⽂件不存在则打开失败,打开时位置指针将移动到⽂件末尾
r+ 可读/写数据,该⽂件必须先存在,否则打开失败
w+ 可读/写数据,⽤该模式打开⼀个新建⽂件,先向该⽂件写数据,然后就可以读取该⽂件中的数据
a+ 可读/写数据,原来的⽂件不被删去,位置指针移到⽂件末尾
打开⽂件需要在使⽤⽂件⽅式前加上字母'b',表⽰以⼆进制形式打开⽂件,如'wb'表⽰以⼆进制⽅式写⼊⽂件
fclose
关闭⽂件流,并释放⽂件指针和相关的缓冲区。如果是以可写⽅式打开⽂件,则该函数会将缓冲区内剩余的数据输出到磁盘⽂件中。
格式:fclose(⽂件指针名);
fgets
fgets函数从⽂件指针中读取数据,每次读取⼀⾏,读取的数据被保存在字符指针指向的字符缓冲区中,每次最多读取(缓冲区⼤⼩-1)个字符,最后⼀个字符是字符串的结束符"0",函数执⾏成功将返回缓冲区指针,若失败货都到⽂件结尾则返回NULL。
格式:fgets(指向字符缓冲区⾸地址的字符指针,字符缓冲区⼤⼩,⽂件指针)、
fgetc
fgetc函数从⽂件指针指向的⽂件中读取⼀个字符,读取⼀个字节后,⽂件的位置指针(定位当前⽂件的内部位置)后移⼀个字节。
fgetc返回读取到的字符,若返回EOF则表⽰到了⽂件结尾,或者出现了错误。
格式:fgetc(函数指针);
fputs
fputc函数向指定的⽂件写⼊⼀个字符串(不⾃动写⼊字符串结束符结束标记符'0'),成功写⼊后,⽂件位置指针会⾃动后移,函数返回为⼀个⾮负整数,否则返回EOF。
格式:fputs(字符串缓冲区⾸地址,⽂件指针);
fputc
fputc将字符写到⽂件指针所指向的⽂件的当前写指针的位置,当正确写⼊⼀个字符或⼀个字节的数据
后,⽂件内部写指针会⾃动后移⼀个字节的位置。
格式:fputc(字符,⽂件指针);
⽂件指针
C语⾔通常⽤⼀个指针变量指向⼀个⽂件,该指针成为⽂件指针,通过⽂件指针就可以对它所指的⽂件进⾏各种操作。
格式:
FILE *指针变量标识符
FILE为⼤写,它是由系统定义的⼀个结构,该结构含有⽂件名、⽂件状态和⽂件当前位置等信息,编写C程序的时候不需要知道这个结构的细节。
实例
获取指定⽂件的内容
c 1 #include <stdio.h> 2 #include <stdlib.h> 3 4 int main(int argc,char **argv) 5 { 6 int exit_status=EXI
T_SUCCESS; 7
while(*++argv!=NULL) 8 { 9 FILE *input=fopen(*argv,"r"); 10 if(input==NULL) 11 { 12 perror(*argv); 13 exit_status=EXIT_FAILURE; 14 continue; 15 } 16 printf("n%s内容如下:n",*argv); 17 int ch; 18 while((ch=fgetc(input))!=EOF) 19 { 20 printf("%c",ch); 21 } 22
if(fclose(input)!=0) 23 { 24 perror(*argv); 25 exit_status=EXIT_FAILURE; 26 } 27 } 28 return exit_status; 29 }读取多个⽂件
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int main(int argc,char **argv)
5 {
6 int exit_status=EXIT_SUCCESS;
7 while(*++argv!=NULL)
8 {
9 FILE *input=fopen(*argv,"r");
10 if(input==NULL)
11 {
12 perror(*argv);
13 exit_status=EXIT_FAILURE;
14 continue;
15 }
16 printf("n%s内容如下:n",*argv);
17 char mytext[500];
18 while(fgets(mytext,500,input)!=NULL)
19 {
20 printf("%s",mytext);
21 }
22 if(fclose(input)!=0)
23 {
24 perror(*argv);
25 exit_status=EXIT_FAILURE;
26 }
27 }
28 return exit_status;
29 }
输⼊⽂字追加到⽂本⽂件
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论