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 条评论
 下一页
  
   
   
   
  
  
  
  
  
  
  
  
  
  
 