1、sizeof()
int main()
{
int a[20];
int count=sizeof(a)/sizeof(int);
printf("%d\n",count);
return 0;
}
2、指针数组
整型数组 int a[20];
int a=10;
int b=20;
指针数组 int *a[20]={&a,&b};
char c='m';
char d='n';
char b[20]="hello";
char *b[20]={&c,&d};
char *argv[]={"hi","sunhong"};
3、字符串函数
strlen 和 sizeof 的区别
#include
#include
#include
int main(int argc,char *argv[])
{
char *str="hello";
size_t count=strlen(str);
printf("%d\n",count);
printf("zhizhen str is%d\n",sizeof(str));
return 0;
}
难点:字符串初始化辨析
int main(int argc,char *argv[])
{
char *str="hello"; //等号左边 是 地址变量-----等号右边 也必须是 地址
char str2[20]="hello"; //等号左边定义了1个数组,现在要给数组的20个元素赋值-----等号右边是每个元素 的 值 数组名-----是h字符的地址
//原因是 = 是用在给变量定义时,同时又初始化
return 0;
}
int main(int argc,char *argv[])
{
char *str="hello";
char str2[20]="hello";
char ch1;
char *str;
str=&ch1; //就是简单的赋值, = 两边的类型一致 就可以了----因为不是定义的同时进行初始化
char str2[20];
str2[0]='h'; //就是简单的赋值, = 两边的类型一致 就可以了
return 0;
}
难点:strlen和sizeof的区别
1、strlen必须针对字符串
2、sizeof()的参数为 真数组名、假数组名时,结果不同
3、sizeof()的参数可以为:变量名、数据类型int double
int main(int argc,char *argv[])
{
char *a="hello"; //sizof的结果为4
//char a[]="hello"; sizeof的结果为6
sizeof(a);
return 0;
}
知识点:
给字符型数组 赋值 的方法:
char name[20];
//name="zhangan"; name是常量
strcpy(name,"zhangsan");
结构体:
知识点:
1、我们自己定义1个数据类型,它叫 Student-------int 同级别
struct Student
{
int number;
char name[20];
};
int main(int argc,char *argv[])
{
struct Student stu1={1001,"zhangsan"}; //定义变量的同时,进行初始化
printf("number is%d\n",stu1.number);
printf("name is %s\n",stu1.name);
return 0;
}
课堂练习:
输入3个学生信息,然后打印输出
代码:
#include
#include
#include
struct Student
{
int number;
char name[20];
};
int main(int argc,char *argv[])
{
int i;
struct Student stu[]={1001,"zhangsan",1002,"lisi",1003,"wangwu"};
for(i=0;i<3;i++)
{
printf("%d\t%s\n",stu[i].number,stu[i].name);
}
return 0;
}
改进后的代码:
#include
#include
#include
struct Student
{
int number;
char name[20];
};
int main(int argc,char *argv[])
{
int i;
struct Student stu[3];
for(i=0;i<3;i++)
{
printf("请输入学号:");
scanf("%d",&stu[i].number);
printf("请输入姓名:");
scanf("%s",&stu[i].name);
}
for (i=0;i<3;i++)
{
printf("%d\t%s\n",stu[i].number,stu[i].name);
}
return 0;
}
动态内存分配:
char ch='m';
char *name;
//name=&ch;
name=malloc();
改进后的代码-----name为char *,使用malloc
代码:
#include
#include
#include
struct Student
{
int number;
char *name;
};
int main(int argc,char *argv[])
{
int i;
char buffer[100]={'\0'};
struct Student stu[3];
for(i=0;i<3;i++)
{
printf("请输入学号:");
scanf("%d",&stu[i].number);
printf("请输入姓名:");
//stu[i].name=malloc()
scanf("%s",buffer);
stu[i].name=(char *)malloc(strlen(buffer)+1);
strcpy(stu[i].name,buffer);
}
for (i=0;i<3;i++)
{
printf("%d\t%s\n",stu[i].number,stu[i].name);
}
return 0;
}