C语言家教记录(六)

news2024/11/13 9:10:25

导语

本次授课的内容如下:指针,指针和数组

辅助教材为 《C语言程序设计现代方法(第2版)》

指针

指针变量

计算机按字节划分地址,每个地址访问一个字节

指针变量指向变量的地址,指的是变量第一个字节的地址

int *p;
int i,j,a[10],*p,*q;
int *x;
double *y;
char *z;
sizeof(x);

相关运算符

取地址符&

int x;
int *p;
p=&x;//指针变量存储了地址
scanf("%d",&x);
scanf("%d",p);//等价

int i,*p=&i;

间接寻址符*

int x,*p=x;//p是x的别名
x=10;
printf("%d\n",*p);
int y=*&x;
*p=3;
printf("%d %d\n",x,y);

赋值

浅复制:指针指向的是同一个数据

具体讲解书上例子

int i,j,*p,*q;
p=&i;
q=p;
*q=*p;

作参

可以完成对输入参数的修改

#inlcude <stdio.h>
#include <stdlib.h>
void decompose(double x, long *int_part, double *frac_part)//传入的是地址
{
 *int_part = (long) x;
 *fract_part = x - *int_part;
}
int main()
{
	int i;
	double d;
	decompose(3.14159, &i, &d);
	printf("%d %f",i,d);
}

示例程序

#include <stdio.h>
#define N 10
void max_min(int a[], int n, int *max, int *min);
int main(void)
{
 int b[N], i, big, small;
 printf("Enter %d numbers: ", N);
 for (i = 0; i < N; i++)
 scanf("%d", &b[i]);
 max_min(b, N, &big, &small);
 printf("Largest: %d\n", big);
 printf("Smallest: %d\n", small);
 return 0;
}
void max_min(int a[], int n, int *max, int *min)
{
 int i;
 *max = *min = a[0];
 for (i = 1; i < n; i++) {
 if (a[i] > *max)
 *max = a[i];
 else if (a[i] < *min)
 *min = a[i];
 }
}

作返回

示例程序

int *max(int *a, int *b)
{
 if (*a > *b)
 return a;
 else
 return b;
}
int *p,i,j;
p=max(&i,&j);
//不能返回局部变量的指针
int*find_middle(int a[], int n) {
 return &a[n/2];
}

指针和数组

指针算术运算

int*p,a[10];
for(int i=0;i<10;i++)a[i]=i;
p=a;//p指向第一个元素
p++;//p指向第二个元素
p+=5;
p--;
p-=2;
int *q=a;
printf("%d %d",q-p,p-q);

p>q?p:q;//指针相互比较为同一数组中的位置

处理数组

指针可以代替变量i

int a[N], sum, *p;
sum = 0;
//p<a+N也可以
for (p = &a[0]; p < =&a[N-1]; p++)
 sum += *p;

在这里插入图片描述

数组名做指针

数组名是定值,不能用来操作

for (p = a; p < a + N; p++)
 sum += *p;

数组作为函数参数时,直接复制整个数组,但是如果传入数组名,就只会复制数组的首地址

int find_largest(int a[], int n)
{
 int i, max;
 max = a[0];
 for (i = 0; i < n; i++)
 if (a[i] > max)
 max = a[i];
 return max;
}
int find_largest(int* a, int n)
{
 int i, max;
 max = a[0];
 for (i = 0; i < n; i++)
 if (a[i] > max)
 max = a[i];
 return max;
}

示例程序

#include <stdio.h>
#define N 10
int main(void)
{
 int a[N], *p;
 printf("Enter %d numbers: ", N);
 for (p = a; p < a + N; p++)
 scanf("%d", p);
 printf("In reverse order:");
 for (p = a + N - 1; p >= a; p--)
 printf(" %d", *p);
 printf("\n");
 return 0;
}

指针和多维数组

指针可以使得双循环变单循环

for (row = 0; row < NUM_ROWS; row++)
 for (col = 0; col < NUM_COLS; col++)
 a[row][col] = 0;
 for (p = &a[0][0]; p <= &a[NUM_ROWS-1][NUM_COLS-1]; p++)
 *p = 0;

如果只是处理一行

for (p = a[i]; p < a[i] + NUM_COLS; p++)
 *p = 0;

处理一列

for (p = &a[0]; p < &a[NUM_ROWS]; p++)
 (*p)[i] = 0;

数组是数组名永远会被编译器认为是一维的,而不是二维,是指向a[0]而不是a[0][0]

总结和复习

本次授课讲述第11章和第12章内容,关键点:指针

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2046196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL InnoDB中一个update语句从执行到提交的全过程(1)

目录 一、开启事务 二、sql解析、查询计划生成 三、查询要修改的数据 1、读buffer pool的过程 buffer pool的结构组成 1&#xff09;Free List (空闲链表) 2&#xff09;LRU List (最近最少使用链表) 3&#xff09;Flush List (刷新链表) 三条链表之间的关系 2、怎么…

[Linux][OS][信号的保存和处理]

目录 信号的处理 1. 在内核中的表示 2. 相关概念 3. 信号集操作函数 4.sigprocmask 5.sigpending 信号的捕捉 重谈地址空间 信号的处理 1. 在内核中的表示 普通信号&#xff0c;多次产生只会记录一次 信号范围 [1,31]&#xff0c;每一种信号都要有自己的一种处理方式…

Java Spring|day3.SpringBoot

Spring Boot 定义 从本质上来说&#xff0c;Spring Boot就是Spring&#xff0c;它做了那些没有它你自己也会去做的Spring Bean配置。Spring Boot使用“习惯优于配置”的理念让你的项目快速地运行起来&#xff0c;使用Spring Boot很容易创建一个能独立运行、准生产级别、基于S…

SpringBoot + Hadoop + HDFS + Vue 实现一个简单的文件管理系统

1. 安装前的准备工作 1.1 更新系统并安装必要的工具 在终端中运行以下命令&#xff1a; sudo apt-get update sudo apt-get install -y ssh rsync curl1.2 安装 Java 如果系统中没有安装 Java&#xff0c;可以通过以下命令安装 OpenJDK&#xff1a; sudo apt-get install …

软件安全测试的必要性,第三方软件测试机构进行安全测试好处简析

在当前信息技术迅猛发展的时代&#xff0c;软件的安全性显得尤为重要。随着越来越多的企业依赖软件进行日常运营&#xff0c;软件漏洞和安全隐患所带来的风险也逐渐上升。因此&#xff0c;软件安全测试不再是可有可无的选择&#xff0c;而是每个企业必须考虑的关键环节。 一、…

Node之npm常用命令与package.json文件

新书速览|Vue.jsNode.js全栈开发实战-CSDN博客 《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;&#xff08;Web前端技术丛书&#xff09;》(王金柱)【摘要 书评 试读】- 京东图书 (jd.com) npm常用命令 npm默认与Node.js一起安装&#xff0c;可以在命令行中输入…

达梦数据库系列—49.审计功能

目录 1、打开审计 2、审计级别 系统级审计 语句级审计 对象级审计 3、审计文件管理 删除审计文件 查看审计信息 4、审计分析 审计分析工具Analyzer 审计分析工具dmaudtool 1、打开审计 0&#xff1a;关闭审计1&#xff1a;打开普通审计2&#xff1a;打开普通审计和…

qt 5.15.2 使用pdf

1. 安装Qt 5.15.2 选择对应编译器和源码&#xff1a; 安装后已有pdf对应的库和源码&#xff1a; 将QtPdf和QtPdfWidgets目录拷贝到msvc2019_64/include(根据需要用到的编译器而定) 将C:\Qt\5.15.2\Src\qtwebengine\src\pdf\api所有文件拷贝到C:\Qt\5.15.2\msvc2019_64\include\…

低功耗蓝牙协议栈如何学习?

目录 1. 基础知识 1.1 了解BLE基本概念 1.2 阅读BLE规范 2. 实践和开发工具 2.1 使用开发板 2.2 安装开发环境 3. 学习资源 3.1 官方文档和示例 3.2 在线课程和教程 4. 实践项目 4.1 简单项目 4.2 复杂项目 5. 深入理解协议栈 5.1 分析协议栈 5.2 调试和分析 6…

v-charts的下载与引用

近期&#xff0c;因项目需要&#xff0c;需用v-charts做一些登录后首页的展示图&#xff0c;按之前的逻辑echarts官网都有API直接拿来用就行了&#xff0c;但是我的项目框架是vuespringboot&#xff0c;我的vue版本是2.6.1&#xff0c;这个v-charts文档在网上搜了搜&#xff0c…

nginx服务部署及其平滑升级

概述 1. 7层负载均衡&#xff08;nginx&#xff09; 1. 停掉4层的环境 systemctl disable --now keepalived.service # 停用之前的4层协议方式2. 源码安装nginx tar zxf nginx-1.22.1.tar.gz 具体方式是源码编译“三部曲” ./configure # 负责检查环境&#xff0c;生成指导…

每日OJ_牛客_星际密码(矩阵+斐波那契)

目录 牛客_星际密码&#xff08;矩阵斐波那契&#xff09; 解析代码 牛客_星际密码&#xff08;矩阵斐波那契&#xff09; 星际密码__牛客网 解析代码 这个题目首先需要明确矩阵是固定的&#xff0c;其次是矩阵相乘的方法。解题思路&#xff1a;初始化斐波那契数列&#xff…

leetcode刷题-二叉树05

代码随想录二叉树part05|654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树 654.最大二叉树一遍过&#xff0c;不过貌似有多种解法&#xff0c;后序再补充 617.合并二叉树700.二叉搜索树中的搜索98.验证二叉搜索树看其他解题方法 654.最大二叉树 代码…

RCE的另外一些绕过练习

目录 被过滤了flag怎么办 方法 结果 过滤了flag、php、system 方法一 结果 ​编辑 方法二 过滤了很多但是主要的就是过滤了空格 和 注意一下这个就行 方法一 方法二 相对于上面一道题来说多过滤了一个括号 方法一 被过滤了flag怎么办 <?php error_reportin…

29岁才转行软件测试,目前31了,我的一些经历跟感受

按惯例&#xff0c;先说下我基本情况。我是90年的&#xff0c;算是最早的90后&#xff0c;现在跟你介绍的时候还恬不知耻的说我是90后&#xff0c;哈哈&#xff0c;计算机专业普通本科毕业。在一个二线城市&#xff0c;毕业后因为自身能力问题、认知水平问题&#xff0c;再加上…

Cesium倾斜相机视角观察物体

先看效果&#xff1a; 在cesium中&#xff0c;我们有时需要倾斜相机视角去观察物体&#xff0c;如相机俯视45观察物体。 cesium的api提供了倾斜相机视角的配置&#xff0c;但是直接使用cesium的api不能达到我们想要的效果。 函数如下&#xff1a; function flyToBox() {let l…

XSS反射性

目录 1.URL 编码 "javascript:alert(1)" 2.HTML字符实体编码 &#;"javascript" 和 URL 编码 "alert(2)" 3.URL 编码 ":" 就是%3a 4.HTML字符实体编码 < 和 > 5.HTML字符实体编码 < 和 > 6.<s…

UGUI合批个人学习心得

从目前学到的知识上看&#xff0c;合批就是最基础的条件就是需要贴图和材质相同&#xff0c;这两个一样才有可能合批&#xff0c;UGUI合批是以Canvas为单位的。 UGUI的合批就是把某个Canvas下满足合批规则的UI控件的网格合并为一个大的网格&#xff0c;然后将这些网格合并在一起…

MyBatis首篇-入门第一文

目录 MyBatis关键特性和概念使用步骤简单示例 核心组件主要特点常见使用情景常见优化策略 MyBatis MyBatis是一个优秀的半自动化持久层框架&#xff0c;它支持定制化SQL、存储过程以及高级映射。MyBatis避免了大部分JDBC代码和手动设置参数以及获取结果集的繁琐性。用户只需要…

机器学习/深度学习——模型的欠拟合和过拟合,正则化方法详解

机器学习/深度学习——模型的欠拟合和过拟合&#xff0c;正则化方法 详解 搭配以下文章进行学习&#xff1a; 卷积神经网络&#xff1a; 深度学习——卷积神经网络&#xff08;convolutional neural network&#xff09;CNN详解&#xff08;一&#xff09;——概述. 步骤清晰…