本文最后更新于 2151 天前,其中的信息可能已经有所发展或是发生改变。
指针和数组
1.数组名表示该数组首元素的地址
2. ar[n] 的定义为 (*ar +n) ,即指针从首地址向后移 n 个单位。
3.变长数组(VLA)指的是在创建数组时,可以使用变量指定数组的长度。
4.复合字面量(匿名数组)
pt1 = (int[]) {10, 20};
//复合字面量(匿名数组),返回的是一个指针,指向了构建的数组字面量。
5.当一个字符串字面量赋值给一个指针时,对这个指针解引用后修改会影响所有出现该字符串的值。
char * p1 ="Mirco";
p1[0]= 'L';
printf("%s",""Mirco"");
//结果将会是 Lirco
而将一个字符串赋值给一个数组时,会拷贝一份到数组,此时修改该数组中的字符串时,不会对其他使用该字符串字面量操作有任何影响,但是这样会增大内存的使用量。因此当只需输出一个字符串时,适合用指针。当需要修改字符串时,适合用数组。同时,这也说明了,指针是直接对全局的内存直接修改,较为灵活且有危险性,而数组会创建一个副本,相对安全保守。
6. 字符串常用函数
#include <string.h>
strlen(arr);//返回字符串arr长度
strncat(arr1,arr2,15);
//将arr2的内容在后追加到arr1; ,15表示最大追加字符数(可选)
//该函数返回追加完后的arr1的指针
strcmp(arr1,arr2);//通常用于比较两个字符串是否相等,如果相等返回0
//也可以用于比较字母排序
strcpy(arr,"ABC");//把字符串复制到数组中(其实就是复制粘贴两个数组的内容)
sprintf(arr1,"Pi 的值 = %f", M_PI);
//和printf类似格式化字符串后输入到数组中
//Pi 的值 = 3.141593
#include <stdlib.h>
itoa()
//将整型值转换为字符串。int to arr
atoi()
//将字符串转换为整型值。 arr to int
#include <ctype.h>
int tolower(int c);
//转换为小写字母
int toupper(int c);
//转换为大写字母
7.添加命令行参数
int main(int argc, char *argv [])
8.强制转换
float x;
int(x);
//(int)x 强制类型转换,是将浮点数x为参数构造整数
(int * )a
//强制转换为整形指针
9.写文件
FILE *fp;
fp = fopen("file.txt","w+");
fputs("This is runoob.com", fp);
//或者
fprintf(fp,"This is good %s",somesthing);
//指针指向文件开头,偏移7个字节后开始写入
fseek( fp, 7, SEEK_SET );
//SEEK_CUR 文件指针的当前位置
//SEEK_END 文件的末尾
ftell(fp);
//给出文件指针所在位置
10.序列化
fread();
fwrite();
//其他函数
int feof(FILE *fp)和 int ferror(FILE *fp)//监测读取异常
int fflush(FILE *fp) //刷新缓冲区
int setvbuf() //创建缓冲区
11.结构体
//申明一个结构体 ,类似于创建一个类
struct book
{
char title[MAXTITL];//一个字符串表示的titile 题目 ;
char author[MAXAUTL];//一个字符串表示的author作者 ;
float value;//一个浮点型表示的value价格;
};//注意分号不能少,这也相当于一条语句;
struct book library;//相当于创建一个实例化对象 library,它具有book结构的所有类型
//初始化该结构体
struct book library
{
"BOOKNAME";
"GOODMAN";
"19.99";
}