周六内容

字符数组和字符串:
String str1 = "hello"; //String数据类型在C语言里面没有,在C++和Java里面是有的;
===》C里面是用字符数组的方式来保存字符串!


strlen(str):表示的字符串的长度;
char str[100] = {0};
'\0'表示的是字符串结束,‘\0’之前的字符是字符串的有效字符:
===》hello world'\0'    ===》‘\0’称为魔数【在C语言里面用来表示特定含义的数】
===》所以strlen是不把'\0'计算在字符串的有效长度里面;
‘\0’在ASCII里面对应的是0 ===》表示的就是什么都不显示;

sizeof(str):表示的字符串在内存中所占字节空间的大小;===》计算'\0';
char str[100] = "hello world"; //sizeof(str) = 100;
char str[] = "hello world"; //sizeof(str) = 5 + 1 + 5 + 1 = 12;  ===》会在最后自动添加'\0'
char a[] = {'h','e','l','l','o',' ','w','o','r','l','d'};//sizeof(a)  = 11; ===》不会自动添加'\0';

char str[11] = "hello world"; 
//strlen(str):从“hello world”中的'h'开始往后依次遍历(一个一个地找),知道找到'\0'为止,那么‘\0’
//之前一直到'h',是strlen(str)的大小,因为定义的是str[11]正好能够存放“hello world”,字符数组str中没有剩余的
//没有剩余的空间来自动添加'\0',所以会一直往后寻找,直到遇到‘\0’为止,因为'\0'的位置不确定,导致
//strlen(str)的大小是不确定的;

总结一下:字符串的实质是是什么?
有固定开头和结尾的,在内存中连续存放的一串字符;
注意:
1、固定开头;
2、固定结尾:'\0'
3、连续存放:因为字符串在C语言里面是采用字符数组的方式存储===》数组是在内存中开辟的连续空间!


函数:
什么是函数,为什么需要函数,有了函数之后有什么好处,没有函数行不行?
对于函数有什么操作;

1、为什么需要函数?
main()
{
XXX;
XXX;
}
自然段;----》章 ----》卷或者季;
盗墓笔记第一季:
第一章;
第一段;
第二段;
第三段;
第二章;
第三章;
。。。
盗墓笔记第二季;
。。。
盗墓笔记第三季;
。。。
===》采用“分”的思想;

===》编程:采用“分”的思想;===》分成模块 ===》分成函数;

2、什么是函数;
3、有了函数之后有什么好处
①代码更加精简,是程序模块化;
②函数可以复用;
4、没有函数行不行;
行!
5、对于函数要掌握哪些知识点:
①定义;
首先要明确,要定义的函数应该具备什么功能;
如何定义:
函数的返回值类型 函数的名字(函数的参数列表)
{
函数的代码块;
}

注意:
函数可以没有参数列表,但是()不能丢;
最终返回的数据类型一定要和“函数的返回值类型 ”一样!


②声明;
内部声明和外部声明;
内部声明:
为什么要声明:
编译器在进行编译的时候是从上往下进行编译的!
如果函数的定义在函数调用之前,可以不进行声明;
如果函数的定义在函数调用之后,不进行声明,会报警告!===》有些编译器不会报警告!
声明的作用:
告诉编译器,函数的名字是什么,函数有没有参数列表,如果有的话,应该给函数传递什么类型的参数,
传递多少个参数!===》告诉编译器,函数的正确使用方法;
当调用函数的时候,会根据函数的声明,来判断,函数调用的是否正确!
如何声明;
最简单的方法:把函数定义的第一行复制粘贴,然后在后面加个分号;

外部声明:extern

③调用;
函数的调用过程其实就是实参传递到形参的过程!
===》实参和形参;
实参:函数调用的时候,给函数传递的真实值;
形参:函数定义的时候的函数列表;

如何调用:
实参给形参传递的时候,是把实参的数“拷贝”一份给形参;
===》既然是拷贝,传递的方向,只能是实参--->形参,不能够形参--->实参!

函数的形参所占用的空间,是在函数调用的时候分配的,没调用的时候不分配空间;
调用结束函数形参所分配的空间由系统自动释放,程序员不用管;

函数调用的时候是按照顺序调用的,不是按照名字!实参的名字跟形参名字没有半毛钱关系!

===》第一个实参的数据拷贝给第一个形参;第二个实参的数据拷贝给第二个形参,。。。。

实参和形参的类型要一样!

/*****************************************************************
功能:输入一个字符串,要求输出该字符串中最长的数字字符串;
例子:
输入:abcd123ab1234567
输出:1234567


想法:
第一步:获取字符串:
char str[100] = {0};
获取字符串保存到str里面;

第二步:处理:
char max[100] = {0}; //专门用来保存最长的数字字符串;
char temp[100] = {0}; //专门用来从str里面解析出来的字符串;

temp[]  = "123";

if( strlen(temp) > strlen(max))
{
把temp里面的字符串保存到max里面,对max进行覆盖!
}

第三步:最后输出;
max


str[i] >= '0' && str[i] <= '9'
*****************************************************************/

函数的其他知识点:
1、函数的嵌套调用:函数A里面调用函数B; ==》一个函数里面调用其他函数!
2、函数的递归调用:也就是函数自己调用自己;
n!
3、return:结束当前函数的执行,返回到函数调用的地方!
  exit(); 结束当前程序的执行;
4、函数的执行有两个目的:
①只追求过程,不强调结果;===》void(空),来做函数的返回值类型;
②强调结果 ===》需要有返回值! 返回值类型不要用void;


指针:
什么是指针?为什么需要指针?有了指针之后有什么好处?没有指针行不行?
1、什么是指针?
指针的全称“指针变量”,本质上也是一个变量!跟int cha float....没什么区别,都是用来保存数据!
int a; //12345;
char c; //'a'
float fl; //1.2
既然指针是变量,所以也是用来保存数据!====》保存的是其他变量的地址!【跟普通类型的变量不一样的地方】
比如,一个指针变量可以保存a的地址,或者是c的地址!

2、为什么需要指针变量;
java里面没有指针;===》进行了一层封装===》“糖衣”

3、有了指针变量有什么好处?
提高效率,也可以对相应内存地址进行操作;
4、没有指针行不行呢?

首先牢牢记住一句话:指针的本质是变量,跟普通的数据类型的变量没有本质差别!
===》对于变量有哪些操作:
1、定义;
int a;
int *p; //在你定义的时候,*表示的是指针变量;
==》
数据类型 *指针变量名;
//char *p;

int *p;
int (*p)(int); //int (*)(int);

指针的类型:
int *; //把指针变量的名字去掉,剩下的就是指针的类型;
指针指向的类型;
int; //把指针变量的名字和*去掉,剩下的就是指针指向的类型;


2、初始化;
什么叫初始化?
就是给变量赋初值!
指针变量初始化:
===》就是给指针变量赋初值!
===》指针变量保存的是什么? ===》地址!
===》也就是给指针变量赋“初始的地址”; 或者就是将地址保存到指针变量里面去!
===》怎么赋地址?
===》①将其他一个变量的地址保存到指针变量里; //int *p = &a;
===》②将NULL赋值给指针变量; ===》NULL表示的是0地址! //int *p = NULL;

//首先把下面四个搞懂!能够结合画图来理解!
printf("a = %d\n",a);
printf("&a = %p\n",&a);
printf("p = %x\n",p);
printf("&p = %p\n",&p);


printf("*p = %d\n",*p); //p里面保存的是a的地址,*是取值运算符,也就是将p里面保存的地址所对应的
//空间里面的值取出来!


3、赋值;
int a = 10;
int *p;

p = &a; //相当于指针变量p和a绑定了;===》从现在开始,p里面保存的值是a的地址;


指针为什么要有类型?
因为指针指向的对象是有类型的!
所以想通过指针变量来获取指针指向的对象里面的数据的话,我得从那个地址开始连续取多少个字节!
===》指针要有类型!
int *p1; //保存的是int变量的地址;
char *p2; //保存的是char变量的地址;

printf("*p1 = %d\n",*p1);
printf("*p2 = %d\n",*p2);

4、运算;
对于普通的int变量,可以进行加减乘除操作;
==》对于指针变量?
char str[] = {"hello"};
char *p = str;

5、作为函数的参数;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值