C学习笔记-311

news/2025/3/11 14:33:57/文章来源:https://www.cnblogs.com/jearmy/p/18764637

多维数组和指针

为什么需要数组

  1. 为了解决大量同类型数据的存储和使用问题。
  2. 用数组可以模拟现实世界。

Int a[25]:一维数组,可以当做一个线性结构。

Int a[8][6]:可以当做一个平面,意思是8行6列。有48个元素。

Int a[3][4][5]:可以当做一个三维立体。

Int a[3][4][5][6]:可以当做一个四维空间。

a代表二维数组首元素的地址,现在的首元素不是一个简单的整型元素,而是由4个整型元素所组成的组,因此a代表的是首行(即第0行)的首地址。a+1代表第1行的首地址。

a[0]、a[1]、a[2]既然是一维数组名,而C语言又规定了数组名代表数组首元素地址,因此a[0]代表一维数组a[0]中第0列元素的地址,即&a[0][0]。a[1]的值是&a[1][0],a[2]的值是 &a[2][0]。

具体表示形式如下:

二维数组的访问:

/*输出二维数组任一行任一列元素的值
*/#include <stdio.h>void main(void)
{int a[3][4] = {1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23};int (* p)[4];int i, j;p = a;scanf("i=%d,j=%d",&i, &j);printf("a[%d][%d] = %d\n", i, j, *(*(p+i)+j));
}

i=2,j=2
a[2][2] = 21

在程序中,“int (* p)[4]”表示p是一个指针变量,它指向的是包含4个整型元素的一维数组。 注意*p两侧的括号不能省略。如果写成*p[4],则为指针数组。

*a有4个元素,每个元素都是整型。也就是说,a所指的对象是有4个整型元素的数组。即a所指向一维数组的指针。

void printArray2D(int (*a)[4], int rows)
{int i,j;for(i = 0; i < rows; ++i){for(j = 0; j < 4; ++j){printf("%4d", *(*(a + i) + j));}printf("\n");}
}

用指向数组的指针做函数参数

通过例子介绍:有一个班,3个学生,各学4门课程,计算总平均分数以及第n个学生的成绩。

/*指向数组的指针做函数参数:有一个班,3个学生,各学4门课程,计算总平均分数以及第n个学生的成绩。
*/
#include <stdio.h>
void average(float *, int);
void search(float (*p)[4], int);void main(void)
{float score[3][4] = {{65,67,70,60},{80,87,90,81},{90,99,100,98}};average(*score, 12);  //求12个分数的平均分search(score,2);return;
}void average(float *p, int n)
{float sum = 0;for (int i=0;i<n;i++){sum+=*(p+i);}float aver = sum/n;printf("average = %5.2f\n", aver);
}void search(float (*p)[4], int n)
{//p是指向具有4个元素的一位数组指针printf("the score of No. %d are:\n",n);for (int i=0;i<4;i++){printf("%5.2f ",*(*(p+n)+i));}
}

输出结果:

字符串和指针

例子:将字符串a复制为字符串b

#include <stdio.h>void main(void)
{char a[]="I am a boy.";char b[20];int i;for (i=0;*(a+i)!='\0';i++){*(b+i) = *(a+i);}*(b+i)='\0';//把最后的结束符复制过去;printf("string a is:%s\n",a);printf("string b is:");for (i=0;*(b+i)!='\0';i++){printf("%c",*(b+i));}printf("\n");return;
}
#include <stdio.h>void main(void)
{char a[]="I am a boy.",b[20];int i;char *p1=a;char *p2=b;for(;*p1!='\0';p1++,p2++){*p2 = *p1;}*p2='\0';printf("string a is:%s\n",a);printf("string b is:");for (i=0;b[i]!='\0';i++){printf("%c",b[i]);}printf("\n");return;
}

例题:写一个函数,实现两个字符串的比较,即自己写一个strcmp函数,函数原型为:

int strcmp(char *p1, char *p2)

a

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

e与(p-1)或(q-1)均不互素

题目: from Crypto.Util.number import bytes_to_long from secret import flage = 0x14 p = 7330895897249035860738209657929637460767893905398244379628076799548083100726568174238286139385106848645676643457511649442694896479642275193079806880680590593771233914993…

e与(q-1)互素,但用上题方法求不出

题目: c = 2485360255306619684345131431867350432205477625621366642887752720125176463993839766742234027524 n = 0x2CAA9C09DC1061E507E5B7F39DDE3455FCFE127A2C69B621C83FD9D3D3EAA3AAC42147CD7188C53 e = 3解题思路:分解n得到分析得到e只与(r-1)互素,但用上题方法无法解出…

张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫

目录什么是 Selenium环境搭建与配置安装 Selenium下载浏览器驱动基础操作启动浏览器并访问网页定位网页元素通过 ID 定位通过 CSS 选择器定位通过 XPath 定位与元素交互提取数据交互操作设置等待时间切换页面执行 JavaScript 代码关闭浏览器进阶技巧使用 ActionChains 模拟用户…

DCDC电源模块

车载直流电源DCDC电源模块是一种电力电子设备,它能够在电动汽车或混动汽车的电气系统中,实现直流电源电压之间的升降转换,从而确保低压电电气系统在车辆运行过程中获得稳定且适当的电源供应。 车载直流电源DCDC电源模块是一种电力电子设备,它能够在电动汽车或混动汽车…

SpringSecurity5(1-快速入门)

Spring Security提供了简单而强大的安全机制,支持身份验证和授权。基本使用包括在Spring Boot应用中引入Spring Security依赖,配置HTTP安全规则,定义用户角色和权限。通过使用内存用户存储或集成数据库,可以实现基于表单登录、HTTP基本认证等多种认证方式,确保应用程序的安…

ASE9N20-ASEMI工业自动化专用ASE9N20

ASE9N20-ASEMI工业自动化专用ASE9N20编辑:ll 一、性能卓越,能效先锋 9N20 MOS 管最为人称道的便是它超低的导通电阻。在电路中,犹如为电流开辟了一条 “高速公路”,让电能得以高效传输,极大减少了因电阻产生的热损耗。这意味着无论是为便携设备供电的 DC - DC 转换器,还是…

LayerSkip: 使用自推测解码加速大模型推理

自推测解码是一种新颖的文本生成方法,它结合了推测解码 (Speculative Decoding) 的优势和大语言模型 (LLM) 的提前退出 (Early Exit) 机制。该方法出自论文 LayerSkip: Enabling Early-Exit Inference and Self-Speculative Decoding。它通过使用 同一个模型 的早期层来生成候…

2025年我用 Compose 写了一个 Todo App

标题党嫌疑犯实锤 序言 从2月12日到3月4日这整整三周时间里,我从零开始又学习了一次 Compose。 为什么说又,是因为这已经是我第二次学习这套课程了。 故事从 4 年前说起,2021 年在意外获悉扔物线朱凯老师准备发布一套名为 Compose 的新课程,意识到这是 Android 未来的方向,…

Ubuntu设置静态IP——NetworkManager方式

1、直接在系统界面上设置静态IP的方式,不再赘述 2、命令行方式查看已经有哪些工具#查看状态 sudo systemctl status Netplan sudo systemctl status NetworkManager sudo systemctl status systemd-networkd sudo systemctl status NetworkManager出现Active,说明电脑已经安装…