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