2020年九月第二周学习

2020年九月第二周学习

  • 两种const指针区别
  • 指针 + 1
  • 内存申请与释放
  • 字符串操作
  • 结构类型
  • 格式化的输⼊输出
  • 文件

两种const指针区别
1.指针是const
表示一旦得到了某个变量的地址,不能再指向其他变量。
int *const q = &i; //q 是 const,q存放的是const的地址,地址不能改变,所以不能再指向其他变量。则:
*q = 26; //OK
q++; //ERROR
2.所指的是const
表示不能通过这个指针去修改那个变量(并不能使得那个变量成为const)具体操作:在给一个函数传入变量的时候,不希望在函数中被改变则可以使用这个方式传入参数。
const int *p =&i; //p 是const,不能改变p的值,但是可以通过改变i的值来实现值的改变。
则:
*p = 26; //ERROR! (p)是const不能改变
i = 26; //OK
p = &j; //p的值可以改变,即指针
p的指向可以改变。

int i;
const int *p =&i;
int const *p =&i;
int *const p =&i;

判断哪个被const了,就看const是在*前面还是后面。前两种代表的意思相同,都是不能通过指针改变值,最后一种是指针的地址不能改变。
数组可以看做是一种 int *const p的指针,不能改变地址,也就不能实现a[] =b [];操作。

指针 + 1
指针加一实际上加的是sizeof的值,sizeof(char)=1,一个char类型的指针加一加的就是1;而sizeof(int)=4,一个int类型的指针加一加的是4;地址值会偏移对应类型的大小。
*(p+n) <----> ac[n] 两者等价
加密方式设想,如int类型,不从第一个二进制开始写入有效数据,而是从一个不为4倍数的地址开始写入。

内存申请与释放
首先需要引入stdlib.h的头文件。
void* malloc(size_t size);
定义一个数组时:
int* a = (int*)malloc(size*sizeof(int));
void free(void *ptr);
释放已获得的内存时:
free(a);

字符串操作
包含在一个名为string,h的头文件里面。
1.strlen
size_t strlen(const chars);返回s的字符串长度(不包括结尾的\0)
而sizeof输出的就是字符串的大小,这个是包含最后一个\0的。
2.strcmp
int strcmp(const char
s1,const char *s2);比较两个字符串大小。每个元素对应相比,输出为正,则s1的所有元素的ASCALL码和大,为负则小。
3.strcpy
char *strcpy(char *restrict dst,const char *restrict src);把src的字符串拷贝到dst。
关键字restrict表示src和dst不重叠。
有返回,返回dst;
4.strchr
char strchr(const chars,int c);在字符串s中从左侧寻找c第一次出现的位置。正常返回指针,返回NULL表示没找到。
5.strrchr
char strchrr(const chars,int c);在字符串s中从右侧寻找c第一次出现的位置。正常返回指针,返回NULL表示没找到。
6.strstr
char *strstr(const char *s1,const char *s2);在s1中寻找s2这个字符串。
7.strcasestr
char *strcasestr(const char *s1,const char *s2);
在s1中寻找s2这个字符串,无论大小写。

结构类型
1.枚举
enum 枚举类型名字{名字0,……,名字n};
他们的类型是int,值依次从0到n。
2.结构
struct结构类型可以定义几个具有相同含义的变量,方便引用和数据专递。

struct date {
	int month;
	int day;
	int year;
}; //这是定义了一个date结构类型

struct date today;
//这是定义了一个date结构类型的变量today

today.month =11;
today.day = 31;
today.year = 2014;
//这样来对today结构赋值
/*或者*/
struct date today = {11,31,2014};

struct date *p =&today;
//下面这两个表达式是等价的
(*p).month =12 ;
p->month = 12 ;

可以用数组套结构,结构套数组。。。套娃。
3.类型定义
typedef,可以给结构体命名。
typedef struct node {
int data;
struct node *next;
} aNode;
4.联合
union,多个成员使用一个空间。
可以通过union得到一个int的各个字节。

格式化的输⼊输出
printf
%[flags][width][.prec][hlL]type
1.flag

Flag含义
-左对⻬
+在前⾯放 + 或 -
(space)正数留空
00填充

2.width或.prec
在这里插入图片描述3.hIL
在这里插入图片描述4.type
在这里插入图片描述scanf
%[flag]type
1.flag
在这里插入图片描述2.type
在这里插入图片描述文件
FILE* fopen(const char * restrict path, const char restrict mode);
int fclose(FILE stream);
fscanf(FILE
, …)
fprintf(FILE
, …)
在这里插入图片描述二进制读写
size_t fread(void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);
size_t fwrite(const void *restrict ptr, size_t size, size_t nitems, FILE *restrict stream);

在文件中定位
long ftell(FILE *stream);
int fseek(FILE *stream, long offset, int whence);
SEEK_SET:从头开始
SEEK_CUR:从当前位置开始
SEEK_END:从尾开始(倒过来)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值