笔记整理:
day10
printf("%ld",sizeof(int*)); 8
void* q=p;可以接受任意类型的指针 (int)q 取值需要强制转换 (目标类型)
int arr[3][3]= {1,2,3,4,5,6,7,8,10};
printf("%d\n",(arr+8)); //arr 是一个二级指针取出arr行指针 +8 指针偏移
<C语言深度剖析>,<c和指针>系类,<c语言陷阱和缺陷>
int( p[5])(int,int)={add}; //函数指针,其本质是一个指针变量 函数指针数组
int fun(int,int); //指针函数
void代表通用指针,他可以指向任何类型的指针,但是需要注意:void类型的指针,不能取值,因为系统不知道当前的void到底指向什么类型的指针,所以无法分配具体的缓存去计算数据
arr1/arr2称为指针数组:本质是一个数组,其存放的元素都是指针的数组。
fread(void* buffer,size_t size,size_t count,FILE* stream)
fread 成功返回数量 失败失败0;
fprintf(wfp,"%d %s\n",DB[i].id,DB[i].name);
if(fscanf(rfp,"%d %s\n",&DB[i].id,DB[i].name)!=2){break;}
fscanf的返回值为:成功读取则返回读取到的元素的数量,这里为2个,失败则返回的值肯定不是2个,甚至是0
fwrite(DB+i,sizeof(stu_t),1,wfp);
fgets成功读取,会将读取到的内容存放如buf内,并将buf返回,失败读取则返回NULL指针
void* memcpy(void* dest,const void *src,size_t n);
return 语句是提前结束函数的唯一办法。return 局部变量的地址非法
sizeof 是操作符(变量 类型)所占内存大小 strlen是函数(字符串)/以0x00为字符串结束
1 函数指针具体应用: 1 回调函数 隐藏函数本体 2 实现不同对象之间的信号通讯 (函数指针数组,将所有同类型的哈尼素直接保存到一个数组中 )
2 段错误: 1 访问了控指针 2 野指针(没有明确的指向)3 访问了常量
指针常量:本质是一个常量,内容可变;
"\033[字体背景颜色;字体颜色m字符串\033[0m"
结构体: 能存不同的数据类类型 任意类型 能存放函数指针
atoi(consrt char*) 将字符串中的数字过滤出来
fputs(fgets)的用法: fgets(char* buf,int size, FILE* fp); 成功返回buf,失败返回NULL
a^=b;b^=a;a^=b; a=a^b;
密码隐藏函数:
char getch(void)
{
int ch;
struct termios oldt, newt;
//printf("please input you password:");
tcgetattr(STDIN_FILENO, &oldt);
newt = oldt;
newt.c_lflag &= ~(ECHO | ICANON);
tcsetattr(STDIN_FILENO, TCSANOW, &newt);
ch = getchar();
printf("*");
tcsetattr(STDIN_FILENO, TCSANOW, &oldt);
return ch;
}
105实战(1)
#include<stdio.h>
#include<stdlib.h>
#defien BUF 10224
int main()
{
int a,b;
int sum;
char buffer[BUF];
printf("***********************************\n");
printf("* Welcome to use our counter *\n");
printf("* Input two integers in one line *\n");
printf("* The sum will be printed *\n");
printf("* Input the char '#' to quit *\n");
printf("* 复制过来的 *\n");
printf("***********************************\n");
while(fgets(buffer,BUF,stdin)!=NULL&&buffer[0]!='#')
{
if(sscanf(buffer,"%d %d",&a,&b)!=2)
{
printf("the input is skipped:%s",buffer);
continue;
}
sum=a+b;
printf("the sum of %d and %d is %d\n",a,b,sum);
}
return 0;
}
%hd 表示短整形 -32767-32767
%d 整形 -2147483648 ~ +2147483647
j=i++;先赋值后加加
j=-i++; //j=(-i)++;
float scanf("%f");