C语言-第二周
2023-08-04 20:02:24 0 举报
AI智能生成
c语言
作者其他创作
大纲/内容
8.1
【1】计算字符串中字符个数(字符串的实际长度)<br>
1.for循环 ,将判断条件设置为不等于\0 进行计数加1<br>
2.sizeof(数组名)/sizeof(数据类型)<br>3.sizeof(数组名)-1 <br><br>
4.strlen
#include <string.h><br> size_t strlen(const char *s);<br>功能:计算字符串实际长度<br>参数:s:字符串的首地址<br>返回值:字符串的实际长度<br>
sizeof和strlen的区别?<br>
1.sizeof是一个关键字,strlen是一个函数<br>2.sizeof作用用来计算数据所占空间大小,strlen就是用来计算字符串的实际长度<br>3.sizeof计算时包含\0但是strlen不包含,sizeof比strlen多一个(在定义字符数组忽略掉元素个数的情况下)<br>
【2】冒泡排序<br>
【3】选择排序<br>
【4】二维数组<br>
定义时可以省略行数但是不可以省略列数<br>
int arr[][3]={1,2,3,4,5,6} //可以省略行数<br>int a[2][]={} //不可以<br>
<font color="#e74f4c">arr[0]----->表示第一行第一列的地址 arr[0]+1:第一行第二列的地址</font><br>
【5】指针<br>
<font color="#e74f4c">注意:定义指针的数据类型和将要存储的数据的数据类型保持一致<br>char a='v';<br>char *p=&a; </font><br>
8.4
<font color="#e74f4c">数组指针</font><br>
<font color="#e74f4c">int a[2][2] = {{1,2},{3,4}};<br>printf("%p %p %p %p\n",a,a+1,a[1],&a[1]);<br>a+1 和 &a[1] 一样</font><br>
<font color="#e74f4c">指针数组:指针的数组,...的(不重要) 后面的重要,则实际上是数组<br>数组指针:数组的指针,...的不重要,所以实际上是指针<br>指针数组中可以用数组指针进行取值</font><br>
【1】大小端<br>
大端:在低地址存储高字节数据,高地址存储低字节数据<br>小端:在低地址存储低字节数据,在高地址存储高字节数据<br>
【2】二级指针
概念:二级指针是用来存储一级指针的地址<br>格式:存储类型 数据类型 **指针变量;<br>int a=10;<br>int *p=&a;<br>int **q=&p;<br>
【3】指针和数组<br>
1.指针和一维数组<br>
二维数组
<font color="#e74f4c">有两种方式:两个*或者一个*和[]</font>
指针数组<br>
存放普通变量的地址
int a=10,b=20,c=30;<br>int *p[3]={&a,&b,&c};<br>访问b的值:*p[1] *( *(p+1))<br>访问c的地址:*(p+2) p[2]<br>
可以存放二维数组的地址<br>
存放二维数组的每一行的首地址<br>int a[2][3]={1,2,3,4,5,6};<br>int *p[2]={a[0],a[1]};<br>访问a[1][2]的值:*(p[1]+2) *(*(p+1)+2)<br>访问a[1][2]的地址:p[1]+2 *(p+1)+2<br>
可以存放字符串
char *p[3]={"hello","world","hqyj"};<br>访问hello字符串:%s格式 : p[0] *(p+0)<br>访问e字符: %c格式:*(p[0]+1) p[0][1]<br>
<font color="#e74f4c">main的形参</font>
7.31
【1】数组<br>
【2】一维数组<br>
定义空数组:<br>
1.int a[3]={0,0,0};<br>2.int a[3]={0};//0,0,0<br>3.int a[3]={};//0,0,0<br>
数组的大小<br>
数组的元素的个数:<br>1.数组的大小/数据类型的大小<br>2.sizeof(数组名)/sizeof(数据类型)<br>
【3】清零函数<br>
1.bzero<br>
#include <strings.h><br> void bzero(void *s, size_t n);<br>功能:将内存空间设置为0;<br>参数:s:需要清空空间的首地址<br> n:需要清空的空间的字节大小<br>返回值:无<br>
memset
#include <string.h><br> void *memset(void *s, int c, size_t n);<br>功能:将内存空间设置为0;<br>参数:s:需要清空空间的首地址<br> n:需要清空的空间的字节大小<br> c:将空间设置成的值 默认是写0,设置成其他不准确<br>返回值:清空空间后首地址<br>
【4】字符数组<br>
3.gets<br>
char *gets(char *s);<br>功能:从终端输入一个字符串<br>参数:s:字符数组的首地址<br>返回值:目标字符串的首地址
puts<br>
int puts(const char *s);<br>功能:向终端输出一个字符串<br>参数:s:要输出的字符数组的首地址<br>返回值:输出的字符的个数<br>
8.2
<font color="#e74f4c">int a=10;<br> void *p = &a; //不可以取内容</font><br>
指针的运算<br>
1.算数运算 + - ++ --<br>
关系运算> < == !=<br>
指针的大小
指针的大小取决于操作系统<br>64位的操作系统 -----》8个字节 <br>linux是一个32位操作系统 ---一个字节等于八位----》指针就占4个字节<br>
段错误<br>
Segmentation fault (core dumped)<br>1.野指针 2.内存泄漏<br>
2.野指针<br> 定义了一个指针没有初始化,会产生野指针<br>解决:给指针进行赋值<br>
2.内存泄漏,对非法空间进行操作<br>
指针修饰<br>
1.const 常量化<br>
1..修饰变量<br>
const int a=10;
或者:int const a=10;
a不可以修改,但是可以通过间接修改的方式修改掉a的值,通过指针修改
2.修饰指针<br>2.1修饰指针*p<br>const int *p;//修饰*p不可以被修改<br>
2.2修饰指针p<br>int * const p=&a;//修饰指针p<br>
const int * const p=&a;//修饰指针p和*p<br>
2.void空<br>
2.1void不可以修饰变量<br>2.2修饰指针<br>
0 条评论
下一页