2020-11-23 周报二

周报二

1.sizeof()的用法
char sum[100], sizeof(sum) =100 (表示整个字符串的大小)

char* sum 或 char sum[] (为函数参数), sizeof(sum)=4 (表示存储一个指针的单元大小)
主要的区别:sum在定义的时候意义不同。
2.文件学习
feof()是C语言标准库函数,其原型在stdio.h中,其功能是检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0(即,文件结束:返回非0值;文件未结束:返回0值)。
文件结束符只能被clearerr()清除(这里的检测流上的文件结束符就相当于声卡检测电流信号的一个过程)。
这里着重强调feof()函数看的是内容而不是位置,所以当我们读到我们写的内容的下一位,即当读到最后一位时此函数还没有检测到流上的文件结束,他需要将文件读写指针再向后移一位,而后才能检测到此文件的结束,并且此函数能检测二进制文件和文本文件,并且因为二进制文件中会出现-1,它的文件结束返回值为0,而不是EOF。

每一个已打开的文件都有一个读写位置, 当打开文件时通常其读写位置是指向文件开头, 若是以附加的方式打开文件(如O_APPEND), 则读写位置会指向文件尾. 当read()或write()时, 读写位置会随之增加,lseek()便是用来控制该文件的读写位置. 参数fildes 为已打开的文件描述词, 参数offset 为根据参数whence来移动读写位置的位移数.

3.快速排序

#include<stdio.h>
int a[101],n;
void quicksort(int left,int right){
	
	int i=0,j=0,t=0,temp=0;
	if(left>right){
		return;
	}
	while(i!=j){
		while(a[j]>=temp&&i<j)
			j--;
		while(a[i]<=temp&&j>i)
			i++;
		if(i<j){
			a[j]=a[i]+a[j];
			a[i]=a[j]-a[i];
			a[j]=a[j]-a[i];
		}
	}
	a[left]=a[i];
	a[i]=temp;
	quicksort(left,i-1);
	quicksort(i+1,right);
	return;
}
int main()
{
	int i=0,j=0;scanf("%d",&n);
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	quicksort(0,n);
	for(i=0;i<n;i++)
		printf("%d",a[i]);
	getchar();getchar();
	return 0;
}

int a[3][4]
int (*p)[4]为二维数组的指针可以等于a;
而int**p不等于a因为类型不符合。
int *p[4]等于int *(p[4])为一个指针数组。
数组名指针名的区别:
a[4];a等于&a等于&a[0]
而int
*p;p等于a但是p不等于&p;

输入函数再理解,我真的很菜。
scanf():这个函数作为一个我最先了解的函数,当打出下面代码的时候,整个人都傻了。

#include<stdio.h>
int main()
{
	char a;
	for(int i=0;i<2;i++){
	scanf("%c",&a);
	printf("%d\n",a);
	}
	return 0;
}

为啥我只输了个‘1’却出现49和10两个数。(我用的是vc++6.0,如果有朋友用其他编译器可能会出现49和13的情况)后来我终于得到了“观音”的点拨了解到键盘缓存区内会将我输入的‘1’后面的回车键也存进去,并且将其默认为是我的第二次输入(可恶)然后就。。。
getchar():这个函数只读取一个字符,该函数的返回值是输入第一个字符的ASCII码;若用户输入的是一连串字符,函数直到用户输入回车时结束,输入的字符连同回车一起存入键盘缓冲区。若程序中有后继的getchar();函数,则直接从缓冲区逐个读取已输入的字符并输出,直到缓冲区为空时才重新读取用户的键盘输入。头文件:#include<stdio.h>。
示例在上边的快速排序。
getch():这个函数是getchar()函数的升级版, 所谓升级就是不用摁回车键了从而不经过键盘缓存区,这个函数的返回值是所输入字符的ASCII码,且该函数的输入不会自动显示再屏幕上,需要putchar();函数输出显示。getch();函数常用于中途暂停程序方便调试和查看。头文件:#include<conio.h>。
但值得注意的是,并不能纯粹的这样进行理解:char* p = “Hello”;相当于将一个字符内容为 “Hello\0” 的 字符数组 的首地址赋值给 字符指针。因为对于char* p = “Hello”; p[1] = ‘A’;对于C语言的编译器是不允许的,但是对于 char str[6] = {‘H’,‘e’,‘l’,‘l’,‘o’,’\0’}; char* p = str; p[1] = ‘A’;对于C语言的编译器来说是允许的。 即通过字符指针直接指向的字符串是不能被修改的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值