字符数组:由多个字符构成
字符串:由多个字符构成,最后一个字符必须是\0
char shting[10]={'a','b','c'};
char string1[10]={"hello"};
char string2[10]="hello";
char *p="hello";
在栈区定义了一个p指针指向文字常量区的内容,不可以使用p对文字常量区的内容进行修改
1.栈区:存储局部变量
2.静态区(全局区):静态变量,全局变量
3.堆区:存放由程序员调用malloc函数时分配的空间
4:.文字常量区:常量字符串(内容只读,不可更改)
5.代码二进制区:代码
<string.h>
strlen 字符串长度
strcpy(x1,x)将右边的字符串拷贝到左边x1(完全覆盖)
注意问题:
1)左边字符串的大小必须要大于右边字符串大小
2)左边的字符串不能是使用char *p定义出来的
字符串比较函数
strcmp(string,string1);
如果两个字符串相同,结果等于0
如果编译器高级
如果左边的字符串>右边的字符串,结果是左边的不同的字符ASCII减去右边对应位字符的ASCII值
如果编译器垃圾
左边>右边,结果为1
左边<右边,结果为-1
字符串连接函数
strcat(x,x)
将右边的字符串拼接到左边的字符串后面
注意
左边字符串的容纳量
字符串初始化的方式
1)char str[2][10]={"hello","world"};
2)char *str1[2]={p,p1}
结构体
可以将不同种数据类型组合在一起的集合
struct 结构
结构体数据类型的定义
struct 结构体名
{
属性变量;(特征变量)
};
结构体变量的定义
struct Person person;
1)结构体变量初始化方法 以下3种
“.”代表“的”
#include<stdio.h>
#include<string.h>
int main()
{
struct Person
{
char name[10];
char sex;
int height;
float score;
};
struct Person person;
person.sex='m';
strcpy(person.name,"xxxx");
person.height=180;
person.score=90.4;
printf("name=%s\nsex=%c\nheight=%d\nscore=%f\n",person.name,person.sex,person.height,person.score);
return 0;
}
2)struct Person person1={"xxx1",'w',120,80.0})
3)struct Person person2=person1
内存对齐:
1)如果结构体里面的成员变量都是基本数据类型的成员,那么第一个成员变量的内存,cong内存偏移量为0的位置,后面的成员变量cong内存偏移量是它本身字节数的倍数开始分配
2)如果结构体成员变量是集合类型,数组,结构体,枚举...比如struct xxx{char ch;int score;}那么该结构体成员cong内存偏移量是该结构体里面最大字节数的成员变量的倍数开始分配
3)最后收尾的时候,总的字节数是最大字节数成员变量的倍数
1.有名结构体
struct Person
{
int a;
char b;
}
2.无名结构体
struct
{
int a;
char b;
}xx; 或者 xx,xx1;
3.定义这个结构体数据类型的同时定义出来一个这个结构体类型的变量
struct Student
{
int score;
char sex;
}stu[2]={{12,'m'},{13,'w'}};
指针访问结构体
(*p).sex='m';
p->sex='w';
将现有的数据类型定义成 你想要的数据类型
typedef 你想更改的类型 你想要的名字
或者
typedef struct Student
{
char name [10];
int num;
}Student;
结构体数据类型的定义一般放在函数的外面,供全局使用
选择排序法