C语言基础:指针(数组指针与指针数组)
数组指针与指针数组
数组指针
概念:数组指针是指向数组的指针,本质上还是指针
特点:
-
先有数组,后有指针
-
它指向的是一个完整的数组
一维数组指针:
-
语法:
数据类型 (*指针变量名)[行容量][列容量];
-
案例:
//数组指针:指向数组的指针(这里不是指向数组元素的指针)int mian(){//一维数组指针//先有数组,再有指针int arr[] = {100,200,300};//获取数组的元素个数int len = sizeof(arr)/sizeof(arr[0])// int *p = arr;//实际上指向了数组的第一个元素 p++//定义一个数组指针,指向arr这个数组int (*p)[3] = &arr; //此时p不是指向arr数组的第一个元素,而是指向arr这个数组本身printf("%p",p);// p++; 此时p++会跳出整个数组,访问到一块未知的内存,程序中尽量避免这种写法// 如何访问数组指针printf("%d\n",(*p)[2]); // 300//遍历for(int i = 0; i < len; i++){printf("%d\n",(*p)[i]); }return 0;}
我们之前所学的是指向数组元素的指针,本质上还是指针变量;现在我们学的是指向数组的指针,叫做数组指针。
二维数组指针:
-
语法:
数据类型 (*指针变量名)[容量];
-
案例:
写法1:
#include <stdio,h>int main(){//创建一个普通的二维数组int arr[][3] = {10,20,30,100,200,300,1000,2000,3000};int len = sizeof(arr)/sizeof(arr[0]);//创建一个二维数组指针//一个二维数组本质上还是一个一维数组,只不过它的元素也是数组int (*p)[3][3] = &arr;printf("%d",(*p)[1][0]);//遍历for(int i = 0; i < len; i++){for(int j = 0; j < len ; j++){printf("%-5d\n",(*p)[i][j]);}printf("\n");}}
写法2:
#include <stdio,h>int main(){//创建一个普通的二维数组int arr[][3] = {10,20,30,100,200,300,1000,2000,3000};int len = sizeof(arr)/sizeof(arr[0]);//创建一个二维数组指针//一个二维数组本质上还是一个一维数组,只不过它的元素也是数组int (*p)[3] = arr; // 10printf("%d",(*p)[0]); //10//获取元素2000//三种写法:内部为行,外部为列printf("2000-%d,%d,%d",*(*(p+2)+1),*(p[2]+1),p[2][1]);return 0;}
-
指针和数组中符号优先级:
()> [] > * -
通过指针引用多维数组

案例1
需求:用指向元素的指针变量输出二维数组元素的值
#include <stdio.h>//用指向元素的指针变量指向二维数组元素的值int main(){//定义一个普通的二维数组int arr[3][4] = {1,3,5,7,9,11,13,15,17,19.21.23};//定义一个指针变量,用来接收二维数组的元素值int *p = arr[0]; // &arr[0][0]//循环遍历for(;p < arr[0] + 12;p++){//每4个换行if((p - arr[0]) % 4 ==0){printf("\n");}printf("%-4d",*p)}printf("\n");return 0;}
案例2
需求:数组指针-输出二维数组任一行一列元素的值
#include <stdio.h>//数组指针-输出二维数组任一行一列元素的值int arr_main1(){//定义一个二维数组int arr[3][4] = {1,3,5,7,9,11,13,15,17,19.21.23};//创建一个一维的数组指针指向二维数组int (*p)[4] = arr; //等价于&arr[0] , p代表我们这个二维数组// 创建两个变量,代表我们对应数据的行和列int row,col;//通过控制台来输入printf("请输入行号和列号:\n");scanf("%d,%d",&row,&col);printf("arr[%d][%d] = %d\n",row,col,*(*(p+row)+col));//*(*(p+row)+col),*(p[row]+col),p[row][col]}int main(){return 0;}
指针数组
概念:指针数组是一个数组,数组中的每一个元素都是一个指针
特点:
-
先有指针,后有数组
-
指针数组的本质是一个数组,只是数组中的元素类型为指针
语法:
数据类型 *数组名[容量];int *arr[4];//int (*arr)[4] 这个是数组指针
#include <stdio.h>int main(){// 定义三个变量int a =10,b = 20,c = 30;//定义指针数组,指针数组用来存放指针的int *arr[3] = {&a,&b,&c};//获取数组大小int len = sizeof arr / sizeof arr[0];//遍历数组for(int i = 0 ; i < len ;i++){printf("%-3d",*arr[i]);//输出每个指针指向的值,需要解引用}return 0;}
建议:我们一般使用指针数组处理字符串
相关文章:
C语言基础:指针(数组指针与指针数组)
数组指针与指针数组 数组指针 概念:数组指针是指向数组的指针,本质上还是指针 特点: 先有数组,后有指针 它指向的是一个完整的数组 一维数组指针: 语法: 数据类型 (*指针变量名)[行容量][列容量]; 案…...
本地部署 LLaMA-Factory
本地部署 LLaMA-Factory 1. 本地部署 LLaMA-Factory2. 下载模型3. 微调模型3-1. 下载数据集3-2. 配置参数3-3. 启动微调3-4. 模型评估3-5. 模型对话 1. 本地部署 LLaMA-Factory 下载代码, git clone https://github.com/hiyouga/LLaMA-Factory.git cd LLaMA-Facto…...
Web前端基础知识(三)
表单的应用非常丰富,可以说,每个网站都会用到表单。下面首先介绍表单中的form标签。 --------------------------------------------------------------------------------------------------------------------------------- <form></form&g…...
数据库设计问题记录
唯一性约束和逻辑删除的冲突 问题描述 如果一张表中,存在唯一性约束,比如一些数据中的code,且数据表使用逻辑删除。当删除某行数据的时候,以后再次插入相同code的数据,数据库会报错。 问题分析 在逻辑删除中&#…...
mac_录屏
参考: mac m1上系统内录方法BlackHole代替soundflower录音(附安装包) https://blog.csdn.net/boildoctor/article/details/122765119录屏后没声音?这应该是 Mac(苹果电脑) 内录声音最优雅的解决方案了 https://www.bilibili.com/…...
【Java-tesseract】OCR图片文本识别
文章目录 一、需求二、概述三、部署安装四、技术细节五、总结 一、需求 场景需求:是对识别常见的PNG,JPEG,TIFF,GIF图片识别,环境为离线内网。组件要求开源免费,并且可以集成Java生成接口服务。 二、概述 我不做选型对比了,我筛选测试了下Tesseract(v…...
redis cluster集群
华子目录 什么是redis集群redis cluster的体系架构什么是数据sharding?什么是hash tag集群中删除或新增节点,数据如何迁移?redis集群如何使用gossip通信?定义meet信息ping消息pong消息fail消息(不是用gossip协议实现的࿰…...
解锁高效密码:适当休息,让学习状态满格
一、“肝帝” 的困境 在当今竞争激烈的职场中,“肝帝” 现象屡见不鲜。超长工时仿佛成为了许多行业的 “标配”,从互联网企业的 “996”“007”,到传统制造业的轮班倒、无休无止的加班,员工们的工作时间被不断拉长。清晨ÿ…...
代码随想录算法训练营第十一天-150.逆波兰表达式求值
队列栈 #include <iostream> #include <vector> #include <stack>class Solution { public:int evalRPN(std::vector<std::string>& tokens) {std::stack<long long> stack_number;for (auto it tokens.begin(); it ! tokens.end(); it) {…...
C++ 泛编程 —— 嵌套使用模板类
嵌套使用模板类 嵌套使用模板类最常见的场景数组容器中有栈容器栈容器中有数组容器递归使用模板类 嵌套使用模板类最常见的场景 容器中有容器 数组的元素可以是栈,栈中的元素可以是数组。先来看一下Stack和Vector的基本代码,定长数组Array的代码也给出来…...
【WebGIS】Cesium:GLTF数据加载
在3D Web GIS开发中,使用GLTF格式的模型可以提高应用的加载速度并提升用户体验。Cesium.js是一个强大的3D地理空间引擎,支持GLTF格式的3D模型,并且提供丰富的API来处理和优化模型的加载和渲染。本文将系统地介绍如何加载GLTF模型,…...
【面经】25届 双非本科 字节跳动 北京 四年的总结
点击“硬核王同学”,选择“关注” 福利干货第一时间送达 大家好,我是硬核王同学,最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 给大家分享一个25届本科大佬的面经,…...
抖去推碰一碰系统技术源码/open SDK转发技术开发
抖去推碰一碰系统技术源码/open SDK转发技术开发 碰一碰智能系统#碰碰卡系统#碰一碰系统#碰一碰系统技术源头开发 碰碰卡智能营销系统开发是一种集成了人工智能和NFC技术的工具,碰碰卡智能营销系统通过整合数据分析、客户关系管理、自动化营销活动、多渠道整合和个…...
goview——vue3+vite——数据大屏配置系统
低代码数据大屏配置系统: 数据来源是可以动态api配置的: 配置上面的api接口后,在数据过滤中进行数据格式的转化。 以上内容,来源于https://gitee.com/dromara/go-view/tree/master-fetch/ 后端代码如下,需要更改…...
中间件xxl-job安装
拉取镜像 docker pull xuxueli/xxl-job-admin:2.4.2 创建xxl-job-admin容器 docker create --name xxl-job-admin -p 9099:8080 -e PARAMS"--spring.datasource.urljdbc:mysql://192.168.96.57:3306/xxl_job2Unicodetrue&characterEncodingUTF-8 --spring.dataso…...
【第2篇】 Python与数据库基础
1. 数据库的基本概念 1.1 表(Table) 表是数据库中存储数据的基本单位,由行和列组成。例如:users 表可以存储用户信息,每一行代表一个用户,每一列代表用户的属性(如姓名、年龄)。 …...
CTFHUB-web进阶-php
我们用蚁剑中的这个插件来做这些关卡 一.LD_PRELOAD 发现这里有一句话木马,并且把ant给了我们,我们直接连接蚁剑 右键 选择模式,都可以试一下,这里第一个就可以 点击开始 我们进入到目录,刷新一下,会有一个…...
深度学习使用Anaconda打开Jupyter Notebook编码
新手入门深度学习使用Anaconda打开Jupyter Notebook编码 1. 安装Anaconda 第一种是Anaconda官网下载安装包,但是很慢,不太建议 第二种使用国内清华大学镜像源下载 选择适合自己电脑的版本,支持windows,linux系统 下载完之后自行…...
金蝶V10中间件的使用
目录 环境准备搭建过程配置修改应用部署 环境准备 Linux内核服务器JDK1.8安装包:AAS-V10.zip程序包:***.war 搭建过程 将安装包上传至服务器opt目录下,官方给定的默认服务主目录为“/opt/AAS-V10/ApusicAS/aas/”;解压安装包(解…...
Firewalld 防火墙详解:深入理解与实践指南
在现代网络环境中,防火墙是保护系统和网络不受未授权访问的关键工具。firewalld是Linux系统中广泛使用的动态防火墙管理工具,它提供了强大的功能和灵活的配置选项。本文将深入探讨firewalld防火墙的工作原理、配置和管理,以及如何在实际环境中…...
Netbird iOS客户端连接问题分析与解决方案
Netbird iOS客户端连接问题分析与解决方案 Netbird作为一款优秀的P2P网络工具,在跨平台使用中可能会遇到一些兼容性问题。近期iOS客户端出现的连接异常现象引起了开发者社区的关注。本文将深入分析该问题的技术背景,并提供有效的解决方案。 问题现象描述…...
Kando代码贡献终极指南:7个步骤提交高质量的Pull Request
Kando代码贡献终极指南:7个步骤提交高质量的Pull Request 【免费下载链接】kando 🌸 Do things with utmost efficiency. 项目地址: https://gitcode.com/gh_mirrors/ka/kando Kando是一款跨平台的饼图菜单桌面应用程序,它提供了一种非…...
tao-8k Embedding模型实操手册:从文本输入到向量相似度计算完整流程
tao-8k Embedding模型实操手册:从文本输入到向量相似度计算完整流程 你是不是经常遇到这样的问题:想要比较两段文字的相似度,却不知道从何下手?或者需要处理超长文本,但现有的工具总是力不从心?今天我要介…...
UABEA:解锁Unity资源编辑新维度的跨平台工具箱
UABEA:解锁Unity资源编辑新维度的跨平台工具箱 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 你是否曾想过深入Unity游戏内部,查看、编辑甚至重构其中的纹理、音频、字体等各类…...
免费开源音频转换工具fre:ac完整指南:跨平台多格式转换与CD抓取终极教程
免费开源音频转换工具fre:ac完整指南:跨平台多格式转换与CD抓取终极教程 【免费下载链接】freac The fre:ac audio converter project 项目地址: https://gitcode.com/gh_mirrors/fr/freac fre:ac是一款功能强大的免费开源音频转换工具,支持Windo…...
如何快速配置Zotero插件:终极管理解决方案与插件市场指南
如何快速配置Zotero插件:终极管理解决方案与插件市场指南 【免费下载链接】zotero-addons Zotero Add-on Market | Zotero插件市场 | Browsing, installing, and reviewing plugins within Zotero 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-addons …...
Qwen2.5-Coder-1.5B快速入门:5个步骤搭建你的私有代码生成服务
Qwen2.5-Coder-1.5B快速入门:5个步骤搭建你的私有代码生成服务 你是否经常需要编写重复性代码?或者面对复杂算法时卡壳?现在,你可以拥有一个私有的AI编程助手。本文将带你用最简单的方式,在本地部署Qwen2.5-Coder-1.5…...
Qwen3.5-27B入门必看:Web界面操作+curl调用+错误排查全流程
Qwen3.5-27B入门必看:Web界面操作curl调用错误排查全流程 1. 快速了解Qwen3.5-27B Qwen3.5-27B是Qwen官方发布的视觉多模态理解模型,它不仅能够进行文本对话,还能理解图片内容。这个镜像已经在4张RTX 4090 D 24GB显卡的环境下完成部署&…...
LAV Filters专业配置进阶指南:深度解析开源解码器架构与性能优化
LAV Filters专业配置进阶指南:深度解析开源解码器架构与性能优化 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters LAV Filters是一套基于FFmpeg的高…...
SeqGPT-560m生成效果实测:在中文语法纠错与润色任务中的表现
SeqGPT-560m生成效果实测:在中文语法纠错与润色任务中的表现 1. 项目背景介绍 今天我们来实测一个特别实用的AI工具——SeqGPT-560m在中文语法纠错与文本润色方面的表现。这个轻量级模型虽然参数不多,但在处理中文文本时展现出了令人惊喜的能力。 本项…...
