C
本文最后更新于 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";
}

 

上一篇
下一篇