字符串

字符串是由字符数组构成的并且以\0作为结束符字符串用双引号引起来;

字符数组与字符串的区别

字符数组不需要以\0结尾,

字符串的初始化

1.最复杂的方式

char b[]={'h','e','l','l','o','\0'};

以字符数组的形式,一个字符一个字符的初始化

2.相对简单的方式  (用双引号引起来的字符串来初始化一个数组)

char c[11]="Good Day1";

用一个字符串来初始化一个字符数组,或则char c[]="Good Day1”;省略下标

直接用双引号引起来的字符串叫做常量字符串,赋值过程,将常量字符串的内容拷贝到字符数组中

3.另外一种初始化方式  (用指针指向一个字符串)

char *pstr="Good Day!";

把一个字符串赋值个一个字符指针,则这个指针指向字符串的首元素,且这样的字符串是一个字符串常量,即“Good day!”,存储在常量区,其内容不能被修改,等价于const char * pstr=“GoodDay!”

字符串的三种存储方式

1.栈区,字符串的内容可以被修改

char a[]={'h','e','l','l','o','\0'};

a[0]='H';

2.常量区,字符串的内容不可以被改变

char *c="hello";

printf("%s\n",c);

3.堆区,使用malloc函数在堆区开辟一块空间,再将字符串存入,字符串的内容可以被改变

char *d=(char *)malloc(6);

d[0]='h';

d[1]='e';

d[2]='l';

d[3]='l';

d[4]='o';

d[5]='\0';

free(d);

charb[]={'h','e','l','l','o','\0'};//'\0\'是字符串的结束符,如果没有\0就是字符数组就不是字符串字符串的本质也是字符数组

printf("%s\n",b);//用%s打印,逗号后边是字符串的地址

//%s从字符串的第一个字符开始一直打印到\0结束符结束。

printf("%s\n",a);

for (int i=0; i<5;i++) {

printf("%c\t",a[i]);//字符数组只能挨个打印

}

#include <stdio.h>

int main(){

//1.一个字符一个字符的初始化字符串,最后一个字符是\0;

char a[]={'h','e','l','l','o','\0'};

//2.

char b[]="hello";//直接用上引号引起来的字符串叫做常量字符串,赋值过程:将常量字符串的内容拷贝到字符数组中。

//3.用指针指向一个字符串。

char *c="hello";//栈上的指针保存常量区字符串的首地址。

//c[0]='H‘,指向常量的的字符串所以字符串的值不能修改。

return 0;

strcpy  char *strcpy(char *to, const char *from);字符串的拷贝

//strcpy(d, b);不能往常量区拷贝

//注意的问题  1.空间要足够大

strcmp (str1,str2) st1>str2返回值大于0;

str1<str2返回值小于0;

str1=str2  返回值等于0

char *a="hello";

char *b="Hellow world";

//字符串比较大小:从两个字符串的第一个字符一个字符一个字符的比较asc码;直到两个字符不一样就可以比较出字符串的大小

int n=strcmp(a,b);//strcmp函数的返回值有三种。大于零,小于零,等于零。

//求字符串的长度不包括\0的位置

//直到什么时候就怎么样的时候用while,这样可能是最简单的

//写程序时尽可能将问题模块儿化,划分成简单的问题

类型重定义

给已经存在的类型重新起一个名字 typedef 称为类型重定义或类型重命名;

结构体:指的是一种数据结构,它用于表示有关联的元素;

数组:相同类型的值的集合。

结构体:有关联的元素的集合。

定义结构体的三种形式

①   先定义结构体,再声明结构体变量;

②   定义结构体的同时声明结构体变量

③   类型重定义

可以类比枚举,格式都是一样的。

int main(){

STUDENT s1;    //如果声明的时候没有初始化,只能再一个一个初始化。

STUDENT s2={12,"ni","sb"};

STUDENT s3={16,"wo","shijie"};

//字符数组 进行单个初始化的时候只能进行 拷贝;

s1.stuId=19;

strcpy(s1.name, "doubi");

strcpy(s1.address, "henan");

STUDENT *m=&s1;

printf("%s%s\n",s1.name,s1.address);    //结构体变量用.访问

printf("%s%s\n",m->name,m->address);  //结构体指针用->访问

return 0;

}

m->name 等价于(*m).name

计算结构体的大小两条规则

一、      结构体中的从第二个成员开始,按自身字节数补齐(把其那边的内存补齐成自身字节数的倍数,有0补齐)

二、      结构体最终的大小是结构体成员中最大字节数的倍数

#include<stdio.h>

typedef struct {

int a;

double b;

char c;

short d;

char f;

}STR;

typedef struct{

double a;

char b;

int c;

short d;

}STR1;

int main(){

printf("%ld\n",sizeof(STR));//24

printf("%ld\n",sizeof(STR1));//24

}

//包含头文件,将头文件中的内容拷贝到当前位置

//头文件中是函数的声明,源文件中是函数的实现

#include <stdio.h>//系统头文件用<>

#include "hello.h"//自定义的头文件用“”

#include <stdio.h>

#define PI 3.14159//宏定义(宏替换)单纯的替换掉文本中的文本内容 宏定义不要带分号,标识符一般大写

#define add(x,y) x+y //宏定义不分配内存,变量定义分配内存 预处理不做语法检查

#define mul(x,y) (x)*(y)//带参数的宏

int main(){

printf("%f\n",PI);

printf("%d\n",add(1,2));

printf("%d\n",mul(1+2, 3+5));

return 0;

}

#if #elif #else #endif 这几个指令称为条件编译指令,可对程序源代码的各部分有选择的进行编译。

C语言基础(七)字符串 类型重定义 结构体相关推荐

  1. C语言基础专题 - 通过案例历学 - 结构体

    C语言基础专题 - 结构体的概念与用法 本文通过实例介绍了C语言中结构体的概念与使用. 阅读本文前推荐阅读:数组 阅读本文后推荐阅读:共用体.位域 1.

  2. 黑马程序员C语言基础(第八天)复合类型(自定义类型)(结构体)、共用体(联合体)、枚举enum、 typedef

    黑马程序员C语言基础(第一天) 黑马程序员C语言基础(第二天) 黑马程序员C语言基础(第三天) 黑马程序员C语言基础(第四天)数据类型 黑马程序员C语言基础(第五天)运算符与表达式.程序流程结构.数组 ...

  3. C语言基础12——自定义类型。结构体、位段、枚举、联合体。通讯录

    目录 结构体 结构体的声明 结构体自引用 结构体变量的定义.初始化以及访问 结构体内存对齐 结构体传参 位段 枚举 枚举是什么? 枚举的声明 枚举的优点 枚举类型的大小 联合体 联合体类型的定义 联合 ...

  4. C语言基础知识之define宏定义表达式,undef,内存对齐,a和a的区别,数组知识点,int (*)[10] p,二维数组参数与二维指针参数,函数指针数组,常见的内存错误及对策

    一.用define宏定义表达式 1.定义一年有多少秒: #define SEC_A_YEAR 60*60*24*365 //上述描述不可靠,没有考虑到在16位系统下把这样一个数赋给整型变量的时候可能会 ...

  5. 类型重定义 头文件预编译设置

    这是一个比较常用的C/C++杂注,只要在头文件的最开始加入这条杂注,就能够保证头文件只被编译一次.在编写头文件的时候,如果没有加上这一句,编译器可能会编译多次这个头文件.VS编译器会报出这个头文件 里 ...

  6. struct类型重定义 不同的基类型_C++构造数据类型

    结构体(struct) 定义: 结构体是一个数据类型,是由多个不同类型的数据组成的数据集合.关键字为:struct . 优点: 大大减少程序代码的离散性,使程序代码阅读更加符合逻辑. 语法: stru ...

  7. sockaddr类型重定义

    这时说的sockaddr类型重定义错误, 实际上包括一大堆: sockaddr, ;sockaddr_in等等. 这是由于windows.h和winsock2.h包含的顺序而造成的错误: 正确的顺序是 ...

  8. VS2010 error C299: “Font”:“struct”类型重定义

    在VS2010里添加了在VC6.0里形成的OFFICE库文件的类 excel9.h,excel9.cpp,就是我在VC6里做操作OFFICE的表格时候添加的库文件,然后把它们( excel9.h,ex ...

  9. error C2011: “Font”:“struct”类型重定义

    error C2011: "Font":"struct"类型重定义 在VS2008里添加在VC6.0里形成的OFFICE库文件的类 excel.h.excel. ...

  10. error C2011: “XXX”:“class”类型重定义

    以前在学习C的时候,老师总是说,为了防止头文件被多次重复调用,一定要添加保护,一直以来编写的文件不多,没有进行复杂的多次调用,也没有出错,久而久之,竟忘了.前些天在做项目时,没有主意这个问题,结果嘛, ...

最新文章

  1. 软件测试人员找工作,去大公司还是去小公司?今天就和大家唠唠
  2. cpu meltdown 熔断 漏洞 突破内存独立性限制 简介
  3. C++ 变量的定义位置
  4. PHP输出缓存(output_buffering)小记 -- 尚有疑问
  5. 多线程、线程池的创建方式,为什么阿里推荐自定义线程池?
  6. hbase查看表结构_HBase基本使用之DDL学习
  7. RabbitMQ入门-Topic模式
  8. mac mysql语句_Mac 下MySQL使用group by 语句报错解决方法
  9. windows搭建SVN服务器
  10. JetbrainsCrack-3.1-release-enc.jar 下载
  11. mysql 清理relay日志_MySQL中binlog和relay log清理方式
  12. Xcode 模拟器如何录屏
  13. CPU与CUDA(GPU)的计算能力对比之二: Keras Resnet 运算效率比较
  14. ACRANSAC之我见
  15. 港科夜闻|全国政协副主席梁振英先生率香港媒体高管团到访香港科大(广州)...
  16. 流水作业调度(动态规划)
  17. 外地人,在上海报考驾照
  18. Linux系统中nacos下载安装
  19. 华为开源的深度学习框架 MindSpore
  20. 联通资费大幅下降意在iPhone用户

热门文章

  1. 数字营销卷得再狠,「阿琉克斯之踵」不能忽视
  2. 源1.0预训练语言模型使用示例
  3. Tyvj 1728 普通平衡树
  4. 三极管实现的锁存电路
  5. wmi服务怎么关?wmi服务关闭有影响吗?
  6. 论文阅读笔记:A brief introduction to weakly supervised learning
  7. 算法交易的机遇和挑战
  8. Linux 删除分区
  9. 数据库概论之无损分解
  10. linux设备/dev/dsp,/dev/mixer