当前位置: 首页 > news >正文

华清远见25072班C语言学习day8

重点内容:

指针:

        其他类型不能存储内存地址,而指针可以存储内存地址

定义:

        数据类型 *指针名;

指针的初始化和赋值:

        int *p; -->定义了一个int*类型的指针p但是没有初始化是一个野指针

        int *p1 = &a; //定义了一个int *类型的指针,用a的地址给指针初始化

        int *p2 = NULL; //将指针初始化为空指针

        p = &a; //p1和p都指向变量a(都保存变量a的地址)

指针和变量的关系:

        指针保存变量的首地址,就称为指针指向该变量

        变量有变量的地址,指针也有自己的地址

        指针指向变量只能指向变量的首地址

通过指针间接访问变量:

        只有通过变量名访问才是直接访问

        指针:  *地址 -----> 获取到该地址中的值

指针涉及到的两个运算符:

        *: 1、乘法运算 2、定义指针变量 3、间接访问地址中的值

                区分2和3:观察*前面是否有数据类型

        &: 1、按位与 2、取地址

指针的大小:

        指针变量的大小是固定的: 64位操作系统占8Byte,32位操作系统占4Byte

指针数据类型的作用:

        决定了指针的偏移量,指针一次可以操作的空间

        指针变量的数据类型和指向数据的数据类型指针

指针之间的强制类型转换:

        指针之间数据类型的强转是安全的,指针之间的强转只改变指针可以操作的空间

大小端存储:

        大端存储:数据高位存在地址低位(网络通信传数据)

        小端存储:数据低位存在地址低位(大部分的计算机都是小端存储)

        测试大小端存储时,注意数据的高数据位和低数据位要不相同

指针的运算:

        指针本质上是内存地址的编号

        大部分运算对指针没有意义

        常用:算数加减法、自增、比较

特殊的指针:

  1. 野指针:不明确指向的指针(间接访问可能会段错误,可能随机值)
  2. 空指针:int *p = NULL; (间接访问一定会段错误)
  3. 万能指针:void * (可以强转成任意类型)

指针和一维整形数组结合:

        前面对于数组中元素的访问,实际上就是通过数组中元素的地址进行访问

        数组名本身是数组中首元素的地址

指针和一维字符数组结合:

        和指针指向一维整形数组除数据类型外,都一致


作业:

1.用指针和一维整形数组结合,完成冒泡排序和选择排序

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
int arr[10];
printf("please enter arr:");
int len=sizeof(arr)/sizeof(arr[0]);
for(int i=0;i<len;i++)
{
scanf("%d",&arr[i]);
}
int *p=arr;
for(int i=1;i<len;i++)
{
for(int j=0;j<len-i;j++)
{
if(p[j]>p[j+1])
{
int temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
for(int i=0;i<len;i++)
{
printf("%d\t",arr[i]);
}
putchar(10);
int *q=arr;
for(int i=1;i<len;i++)
{
int max_index=i-1;
for(int j=i;j<len;j++)
{
if(q[max_index]<q[j])
{
max_index=j;
}
}
if(max_index!=i-1)
{
int temp=q[max_index];
q[max_index]=q[i-1];
q[i-1]=temp;

        }
}
for(int i=0;i<len;i++)
{
printf("%d\t",arr[i]);
}
putchar(10);

    return 0;
}

2.用指针实现strcpy函数、strcat、strcmp函数

strcpy函数:

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr1[20]="welcome to ";
char arr2[20]="hqyj";
char *p1=arr1;
char *p2=arr2;

    while(*p2)
{
*p1=*p2;
p2++;
p1++;
}
*p1=*p2;
puts(arr1);
return 0;
}

strcat函数:

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr1[20]="welcome to ";
char arr2[20]="hqyj";
char *p1=arr1;
char *p2=arr2;
while(*p1)
{
p1++;
}
while(*p2)
{
*p1=*p2;
p1++;
p2++;
}
*p1=*p2;
puts(arr1);
return 0;
}

strcmp函数:

程序源码:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr1[20]="welcome to ";
char arr2[20]="hqyj";
char *p1=arr1;
char *p2=arr2;
while(*p1&&*p1==*p2)
{
p1++;
p2++;
}
if(*p1-*p2>0)
printf("p1>p2\n");
else if(*p1-*p2<0)
printf("p1<p2\n");
else
printf("p1==p2\n");
return 0;
}

3.终端输入带空格的字符串,用指针的方式删除字符串中的空格

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main(int argc, const char *argv[])
{
char arr[15];
printf("请输入字符串:");
gets(arr);
char *p=arr;
char *q=arr;
while(*p)
{
if(*p!=' ')
{
*q=*p;
q++;
}
p++;
}
*q='\0';
printf("删除空格后的字符串:");
puts(arr);
return 0;
}

4.思维导图

http://www.dtcms.com/a/330016.html

相关文章:

  • Spring学习笔记:基于注解的Sprig AOP配置的深入学习
  • ConstraintViolation是什么?
  • 架构设计原则与风格
  • 销售管理系统哪个好?14款软件深度对比
  • 【从网络基础到实战】理解TCP/IP协议体系的核心要点(包含ARP协议等其他协议介绍)
  • Flutter网络请求实战:Retrofit+Dio完美解决方案
  • 2025年前端组件库热度排行榜分析
  • 修复运动模糊的视频用什么软件?快速解决方案分享
  • 仓库无人叉车的安全功能有哪些?如何在提升效率时保障安全?
  • 制作一款打飞机游戏90:完结
  • TF-IDF------词向量转化:从“文字”到“向量”
  • 【Unity3D实例-功能-下蹲】角色下蹲(三)动画配置
  • 直播预告|鸿蒙生态中的AI新玩法
  • 2025年PMP考试指南:内容、题型与核心变化全解析
  • PyTorch神经网络工具箱(神经网络核心组件)
  • Android图片加载库Glide深度解析与实践指南
  • 模型路由相关论文速览——《Universal Model Routing for Efficient LLM inference》
  • FxSound:为你的音频体验注入专业级享受
  • 汽车高位制动灯难达 CIE 标准?OAS 光学软件高效优化破局
  • 中科米堆CASAIM汽车零部件三维扫描检测解决方案
  • 数据结构摘星题库800题笔记 第1章绪论
  • 5G 迷你图传模块:性能与实用性兼备的传输利器
  • 音频重采样使用RandomOverSampler 还是 SMOTE
  • C# 反射和特性(元数据和反射)
  • 【COMSOL】Comsol学习案例时的心得记录分享
  • 字体优化:Web 排版最佳实践
  • Devextreme-vue + Vue2日历下拉框的使用
  • Redis持久化机制(RDB AOF)
  • Form.Item中判断其他Form.Item的值
  • 边学边做边玩:我的类魂斗罗Java小游戏与Java学习(1)