********************************************************************************************************
#include
#include
int main(int argc, char *argv[]) {
char ch[5];
//fgets冲输入缓冲区读取一个字符保存到字符数组中
//当输入的字符串的长度大于数组的长度,此时fgets会自动
//把数组的a最后一个元素变成\0
//当输入的字符串的长度小数数组长度的时候,fgets还会接受一个回车
fgets(ch,sizeof(ch),stdin);
int i;
for(i=0;i<5;i++)
{
printf("%d\t",ch[i]);
}
//printf("--->%s",ch);
fputs(ch,stdout);//不会自动换行除非字符串里面有\n
//puts可以自动换行
return 0;
}
********************************************************************************************************
#include
#include
void test1()
{
const int a=10;
int *p=&a;
*p=100;
printf("%d,%d\n",a,*p); //强制修改
}
int main(int argc, char *argv[]) {
int a=10;
int b=20;
const int *p=&a;//p指向a
p=&b;// 此处的const的作用是指针变量p的指向可以改变
//但是指向的变量的值不能改变; *p=100 是错误的
//2、const修饰的指针变量,指针变量指向的变量值可以变,指向不能变
int* const p2=&a;
*p2=2000;
//p2=&b;//p2的指向不能变
//3、const修饰的指针变量的指向和值,都不能改变
const int*const p3=&a;
//p3=&b; 指向不能变
/
return 0;
}
********************************************************************************************************
#include
#include
//malloc函数的使用
void test1()
{
//从内存中申请一块内存空间,可以存储4个整数
//=赋值,要求等号左右两侧的类型要一致
//p存放的是新申请内存空间的首地址
//注意:malloc申请的内存空间,如果不赋值? 垃圾数
int*p=(int *)malloc(4*sizeof(int));
//使用一个函数给malloc申请的空间进行初始化
//memset(p,'A',16 );把内存空间全都赋值字符A
if(p!=NULL)
{
//申请成功
*p=10;
*(p+1)=100;
*(p+2)=1000;
*(p+3)=10000;//存放4个整数
}
else
{
printf("申请失败\n");
}
int i=0;
for(i=0;i<4;i++)
{
printf("%d\t",*(p++));
}
}
void test2()
{
//calloc分配
//格式:calloc(块数,长度)
//分配了4块,每一块内存长度为4的内存空间
//他们的地址也是连续的
//calloc他是可以自动帮我们把内存空间初始化为0;
int*p=(int *)calloc(4,sizeof(int));
if(p!=NULL)
{
//申请成功
*p=10;
*(p+1)=100;
*(p+2)=1000;
*(p+3)=10000;//存放4个整数
}
else
{
printf("申请失败\n");
}
int i=0;
for(i=0;i<4;i++)
{
printf("%d\t",*(p++));
}
}
int main(int argc, char *argv[]) {
int*p=(int *)malloc(4*sizeof(int));//16个字节
//realloc函数给已经存在的内存空间扩充大小
p=realloc(p,40*sizeof(int));//有可能是新地址
//40个空间
if(p!=NULL)
{
//申请成功
*p=10;
*(p+1)=100;
*(p+2)=1000;
*(p+3)=10000;//存放4个整数
*(p+39)=1;
printf("%d\n",*(p+39));
}
else
{
printf("申请失败\n");
}
int i=0;
for(i=0;i<4;i++)
{
printf("%d\t",*(p++));
}
free(p);
//free(p)以后,p是一个野指针
p=NULL;
*p=100;
printf("%d\n",*p);
return 0;
}
********************************************************************************************************
#include
#include
int* max(int* x,int* y)//形参不能写成(int x,int y)
//否者返回的只是形参的地址
{
return *x>*y?x:y;
}
int main(int argc, char *argv[]) {
//返回a,b两个数中大数的地址
int a=3,b=4;
printf("%p,%d",max(&a,&b),*max(&a,&b));
return 0;
}
********************************************************************************************************
#include
#include
int test(int a[10])
{
int max=a[0],i;
for(i=0;i<10;i++)
{
if(max
{
max=a[i];
}
}
return max;
}
int maxnum(int* a)
{
int max=*a,i;
for(i=0;i<10;i++)
{
if(max<*(a+i))
{
max=*(a+i);
}
}
return max;
}
int *mall(int n)
{
return (int *)malloc(100);
}
int main(int argc, char *argv[]) {
int a[]={2,1,4,5,3,6,8,10,9,7};
printf("%d\n",maxnum(a));
printf("%d\n",test(a));//用数组名作为函数的参数
mall(100);//如果使用这条语句,会造成内存泄露,应该释放掉
int *x=mall(100);
free(mall(100));//free(x);//都可以都行
return 0;
}
********************************************************************************************************
#include
#include
int sum(int a,int b)
{
return a+b;
}
float f1(int x,int y)
{
return (float)x+y;
}
int main(int argc, char *argv[]) {
int x=3,y=5;
int s=sum(x,y);
//定义函数指针
int (*p)(int a,int b);
//初始化函数指针
p=sum;//sum的首地址
//p=f1;类型不同
//注意:定义函数指针的时候, 可以不写形参名
int (*p1)(int,int);
p1=sum;
return 0;
}
********************************************************************************************************
#include
#include
int sum(int a,int b)
{
return a+b;
}
float f1(int x,int y)
{
return (float)x+y;
}
int jian(int x,int y)
{
return x-y;
}
int cheng(int x,int y)
{
return x*y;
}
int chu(int x,int y)
{
return x/y;
}
int main(int argc, char *argv[]) {
//函数指针的使用
//1,定义函数指针
//2,给函数指针初始化
//3,用函数指针间接调用函数
//注意 函数指针不能进行算数运算
int (*p)(int,int);//
p=sum;//p也指向了sum函数
int s=p(23,45);//或者int s=(*p)(23,45);
printf("%d\n",s);
if(1<2)
{
p=jian;
}
switch(2)
{
case 1:p=sum;break;
case 2:p=jian;break;
case 3:p=cheng;break;
case 4:p=chu;break;
}
return 0;
}
********************************************************************************************************
#include
#include
int main(int argc, char *argv[]) {
//定义一个学生的结构体
struct stu{
int sum;
char name[20];
char sex;
float score;
};
//定义一个汽车的结构体
struct Car{
char *color;
int lunzi;
int speed;
};
//定义一个iPhone的结构体
struct iPhone{
char *color;
float screenSize;
int sn;
int imei;
};
return 0;
}
********************************************************************************************************
#include
#include
#include
int main(int argc, char *argv[]) {
struct Student{
int sno;
char name[21];
int age;
float score;
};
//先定义结构体变量,然后在初始化
struct Student stu1;
stu1.sno=38;
stu1.age=18;
stu1.score=59.99;
//char name1[21]="1是11";
//stu1.name="张三丰";
//这两种写法都是不对的
strcpy(stu1.name,"张三丰");
printf("%s",stu1.name);
//GB2312 一个汉字占用2个字节
//UTF-8 XCODE中占用3个字节 国际通用编码
//2,定义同时 初始化 但需要与定义顺序一致
struct Student stu2={8,"凤姐",18,49.99
};
printf("%s",stu2.name);
//3,定义结构体的同时,还可以指定元素初始化
struct Student stu3={.name="hahaha"
};
printf("%s",stu3.name);
return 0;
}
********************************************************************************************************
#include
#include
int main(int argc, char *argv[]) {
struct A{
char ch[13];
char ch1[14];
int a;
double b;
};
//模是8(字节最长的类型)13+14=27 4个模能存下 空出5个 还能存1个int 但存不下double 再多给一个模,因此一共5个模 40个字节
struct A a1;
printf("%d",sizeof(a1));
return 0;
}
********************************************************************************************************
#include
#include
struct Person{
int age;
char *name;
};//全局变量
int main(int argc, char *argv[]) {
//定义结构体变量
//struct Person p2;
//p2.name="cc";//放到括号外的局部结构体后就不可以了
struct Person p1={18,"tom"
};
char *str="aaa";
str="bbb";
p1.name="yoyo";
printf("%d %s\n",p1.age,p1.name);
//局部结构体
{
struct Person{
int age;
};
}//划分作用域
struct Person p2;
p2.name="cc";
printf("%s\n",p2.name);
return 0;
} |
|