指针和数组

MTK平台TP驱动设备树与GPIO配置实战解析 本文详细解析了MTK平台TP驱动开发中的设备树与GPIO配置实战。通过DCT工具配置GPIO引脚,结合设备树节点定义触摸参数,并分享驱动移植、编译调试技巧及常见问题解决方案,帮助开发者快速掌握MTK触摸驱动开发核心。 阅读详情

1.一维数组和指针

int a[10] = {0,1,2,3,4,5,6,7,8,9};
int *p = a;		//等价于 int *p = &a[0];

在这里插入图片描述

  1. 数组名为数组首元素的地址。 所以第二条语句等价于int *p = &a[0];
  2. 数组名a代表首地址,所以a+1和p+1效果相同。注意数组名是常量,不能变化, 所以不能执行类似a=a+1、a++的操作;p是变量,p可以执行类似操作。
  3. a[i] <=> *(a+i) <=> *(p+i) <=> p[i]。 实际上,在编译时,对数组元素a[i]就是按 *(a+i)处理的,[]是变址运算符。
  4. 在指针已指向一个数组时,可对指针进行加减运算。 p+1指向数组中的下一个元素,p-1指向数组中的上一个元素(p+1并不是将p的值(地址)简单地加1,而是加上一个数组元素所占用的字节数)。
  5. p2-p1的结果是两者之间间隔的元素个数。具体算法是p2-p1的值(两个地址之差)除以数组元素的长度。
  6. 如果在程序中引用了a[10],虽然并不存在这个元素(最后一个元素是a[9]),但C编译器并不认为它非法,因为系统把它按*(a+10)处理。这样做虽然在编译时不出错,但运行结果是不预期的,应避免。

2.二维数组和指针

int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}};

在这里插入图片描述

  1. a是数组名,代表二维数组首元素的地址,但现在的首元素是第0行,即由4个整形元素所组成的一维数组。
  2. 可以认为a[0]、a[1]、a[2]是一维数组名,指向每行的起始元素。
  3. a+1代表序号为1的行的起始地址。而*(a+1)就是a[1],而a[1]是一维数组名,所以也是地址,它指向a[1][0]。
  4. 第0行1列元素的地址怎么表示?应该用a[0]+1、*(a+0)+1来表示。
  5. 有必要对a[i]的性质作进一步说明。a[i]从形式上看是a数组中序号为i的元素。如果a是一维数组名,则a[i]的确表示序号为i的地址单元里的值。但如果a是二维数组,则a[i]是一维数组名,它只是一个地址,并不代表该地址单元中的值。
  6. 现在a[0]是一维数组名(一维数组中首元素的地址),a是二维数组名(二维数组中首行的地址),二者的纯地址相同,为2000,但它们的基类型不同,前者指向整型数据,后者指向一维数组。

a[0]、a[1]、a[2]的类型为 int* 型,指向整型变量。
而a的类型为 int(*)[4],指向包含4个元素的一维数组。这就是数组指针。

  1. 在指向行的指针前面加一个*,就转换为指向列的指针, 如a和a+1是指向行的指针,*a和*(a+1)就成为指向列的指针。反之,在指向列的指针前面加&,就成为指向行的指针,如a[0]是指向0行0列元素的指针,而&a[0]指向二维数组的第0行。&a[0] <=> &*a <=> a
    在这里插入图片描述

2.1一级指针遍历二维数组

#include <stdio.h>
int main()
{
	int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}};
	int *p;							//p是int *型指针变量,使其指向列元素
	for(p=a[0]; p<a[0]+12; p++)		//p依次指向下一个元素
	{
		if( (p-a[0])%4==0 )
			printf("\n");
		printf("%4d", *p);
	}
	printf("\n");
	
	return 0;
}

运行结果:
在这里插入图片描述

2.2数组指针遍历二维数组

//输出二维数组任一行一列的元素值
#include <stdio.h>
int main()
{	
	int a[3][4] = {{1,3,5,7},{9,11,13,15},{17,19,21,23}};
	int (*p)[4];	//表示p指向包含4个整型元素的一维数组(数组指针)
	p = a;			//p指向二维数组的第0行
	
	for(int i=0; i<3; i++)
	{
		for(int j=0; j<4; j++)
		{
			printf("%4d", *(*(p+i)+j) );
		}
		printf("\n");
	}
	return 0;
}

2.3数组指针遍历一维数组

重点: 对一维数组名取&,转为指向行的地址

#include <stdio.h>
int main()
{	
	int a[4] = {1, 3, 5, 7};
	int (*p)[4];		//数组指针,指向包含4个整型元素的一维数组
	p = &a;				//重点,对一维数组名取&,转为指向行的地址

	printf("%d\n", (*p)[3] );	//输出a[3],相当于*(*(p+0)+3)
	return 0;
}

在这里插入图片描述

3.数组传参

3.1一维数组的形参

一维数组的形参可以写成如下几种:

void test(int arr[10])
{}

void test(int arr[])
{}

void test(int *arr)
{}

可以接受的参数:
(1)可以是一个整形指针
(2)可以是整型变量地址
(3)可以是一维整型数组数组名

3.2指针数组的形参

void test(int *arr[20])
{}

void test(int **arr)//传过去是指针数组的数组名,代表首元素地址,首元素是个指针向数组的指针,再取地址,就表示二级指针,用二级指针接收
{}

3.3二维数组的形参

void test(int arr[3][4])
{}

void test(int arr[][4])//二维数组的两个方括号,不能全部为空,也不能第二个为空,只能第一个为空
{}

void test(int (*arr)[4])//传过去的是二维数组的数组名,即数组首元素的地址,也就是第一行的地址,第一行也是个数组,用一个数组指针接收
{}

指针的大小

在32位平台下,无论指针的类型是什么,sizeof(指针名)都是4,在64位平台下,无论指针的类型是什么,sizeof(指针名)都是8。

参考:数组和指针的区别与联系(详细)

基于GELAN模块的YOLOv8改进-C2f结构替换与轻量化与高效涨点优化研究 本文详细探讨了在YOLOv8架构中利用YOLOv9的GELAN模块替换C2f结构的改进方法。轻量化版本在资源受限的场景中具有显著的推理效率提升,适用于边缘设备和移动端应用。高效涨点版本则在检测精度上实现了大幅突破,特别适合高精度要求的任务。实验结果显示,GELAN模块相比原C2f模块,在参数量与计算量间取得了更好的平衡,同时提升了检测性能。此外,本文还展示了结构图、训练代码和部署优化方案,为研究者和开发者提供了实践参考。 阅读详情

相关推荐

SpringBoot项目实战:5分钟搞定豆包大模型API接入(附完整代码)

本文详细介绍了如何在SpringBoot项目中快速集成豆包大模型API,仅需5分钟即可完成。从环境准备、依赖配置到核心服务封装和控制器层实现,提供了完整的代码示例和实战技巧,帮助开发者高效接入大模型能力,提升智能客服等应用的开发效率。

weixin_30566063的博客 441

指针在数组里的加法

在C语言中,指针与数组经常放在一起使用,很多情况下数组和指针可以互相转换。 //伪代码 int arr[10] = {0,1,2,3,4,5,6,7,8,9}; int * p = arr; arr[i] == * (p+i);//i是大于0小于数组长度-1的任何正整数 *(arr+1) == arr[i]; 数组和指针的不同: (1)大小不同。 (2)指针可以...

weixin_42422557的博客 1453

CVE-2025-25249漏洞深度解析:FortiOS认证绕过与实战缓解

远程代码执行(RCE)是网络安全中最危险的漏洞类型之一,其核心往往源于认证机制失效或内存安全缺陷。CVE-2025-25249正属于此类高危漏洞——它不依赖用户凭证,也不需要交互触发,而是通过超长HTTP头(如X-Forwarded-For)引发内存越界写入,直接绕过FortiOS和FortiSwitchManager的完整认证流程。该漏洞影响广泛、CVSS评分高达9.8,凸显了嵌入式设备在HTTP协议栈实现中的深层风险。在企业网络中,FortiGate等设备常作为边界守门人,一旦失陷将导致root级控制权

weixin_33694620的博客 525

在数组中的指针+1

在C语言中指针加1指的是增加一个存储单元。**(这是为什么必须声明指针所指向对象类型的原因之一)**对于数组而言,这意味着加1后的地址是下一个元素的地址,而不是下一个字节的地址。 eg: 从上面的例子可以看出,当指针所指向对象类型不同时,它的加1在数组中表现出越过了多少个字节。 eg: int arr[6]={1,2,3,4,5,6} short *pr pr=arr *(pr+1)意思是从数组的第一个元素中的第一个字节起,向后越过俩个字节,因为指针pr的类型是short,且数组中每个元素的类型是in

Sky*殇的博客 2350

车载摄像头+max96712 + rk3568 调试过程中遇到的问题

本文主要讲述本人在调试rk3568通过mipi-csi2链接max967812,max96712再外接4路车载摄像头过程中遇到的问题,以及最终如何解决这些问题。图中会贴上很多重要且关键的波形图,以便读者在调试过程中进行比对,分析。 如果在调试过程中,mipi总线上的波形没得什么问题的话,还是抓图失败的情况下,需要着重检查 频率,lane数,摄像头分辨率,摄像头输入图像格式等重要配置。

Amelio Ming 2067

别再用LabelImg了!我手搓了一个C#“一站式”YOLO工具箱,标注训练推理全搞定

这个工具箱目前已经在两个小型产线项目中试用,反馈非常好。效率提升:原本需要 2 天完成的“数据准备 - 训练 - 验证”循环,现在缩短到了 2 小时。门槛降低:产线技术员经过 10 分钟培训,就能独立完成新产品的模型迭代。当然,它还有改进空间未来计划集成主动学习功能:自动筛选出置信度低的图片,推荐优先标注。支持多模型管理:方便在不同产品型号间快速切换。增加PLC 通信模块:直接在推理界面配置 IO 信号,实现真正的软硬联动。最后想说工具的本质是服务于人。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 442

使用指针插入元素,在有序(升序)的数组中插入一个数,使插入后的数组仍然有序。 要求:自定义函数insert(int *a, int n, int x),用于实现向有序的数组中插入一个元素,并使插入后的

使用指针插入元素,在有序(升序)的数组中插入一个数,使插入后的数组仍然有序。 要求:自定义函数insert(int *a, int n, int x),用于实现向有序的数组中插入一个元素,并使插入后的数组仍然有序,参数分别表示指向数组的指针,有序数字的个数,插入的数。 程序运行结果示例: 输入:请输入10个有序数字 : 1 3 8 9 10 12 13 45 61 90 input inserting data: 11 输出: 1 3 8 9 10 11 12 13

X131644的博客 5516

数据分析案例-2024年裁员数据集可视化分析

本实验数据集来源于Kaggle,原始数据集为2020-2024年裁员数据,共有3577条,12个变量,该数据集提供了不同公司的裁员信息。它包括以下几栏:Company:裁员发生的公司名称。Location_HQ:公司总部位置。Industry:公司所属的行业或部门。Laid_Off_Count:公司解雇的员工数量。Percentage:公司员工被解雇的百分比。Date:裁员发生的日期。Source:信息来源网址。Funds_Raised:公司募集资金的信息。

m0_64336780的博客 1万+

C语言指针基础知识点(六)--通过指针引用多维数组

前期回顾   C语言指针基础知识点(一)–指针及指针变量   C语言指针基础知识点(二)–指针变量的引用   C语言指针基础知识点(三)–指针变量作为函数参数   C语言指针基础知识点(四)–通过指针引用数组   C语言指针基础知识点(五)–用数组名作函数参数 通过指针引用多维数组 1. 多维数组元素的地址 请记住: *(a+i) 和 a[i] 是等价的 如果 a 是一维数组名,a...

zhf的博客 6239

C# 固高板卡(总线型) 操作类

主要功能有:初始化,轴使能,正负方向手动移动,回0,点到点移动,等待移动完成,输入IO数据读取,输出IO控制,清除报警等功能。

StevenChen的博客 572

倍福--实现TCP/IP的配置

控制器为CX5120,需要和上位机做通信,选择TCP/IP的通讯方式,本文介绍TCP/IP通信的操作步骤。 目 录 软硬件版本 3 1.1. 倍福Beckhoff 3 1.1.1. 控制器硬件 3 1.1.2. 控制软件 3 1.2. 串口调试助手 3 1.2.1. TCP调试通信助手 3 授权文件 3 2.1 Lib文件 3 2.2. CAB文件 4 PLC程序编写 4 3.1. 引入TCP/IP库文件 4 3.2. Client端程序 5 3.2.1. 建立相关变量 5 3.3.2. 编写连接功能块

weixin_41883890的博客 5730

05_C++数组和指针

前言 一、数组 由连续的内存空间组成,存储一个固定大小的相同类型元素的集合。 不允许对数组大小作动态定义 int a[5]; // 一维数组初始化 // 1. 完整赋值 int a[4] = {1, 2, 3, 4}; // 2. 其余位自动赋为0 int a[10] = {1, 2, 3}; // 3. 所有位都是1 int a[10] = {1}; // 4. 不显式指定数组大小,但元素个数确定 int a[] = {0, 1, 2, 3, 4, 5, 6, 7}; // 二维数组初始化 i

纯曾少女的博客 334

YOLO26改进策略【YOLO和Mamba】| CVPR 2025:EfficientViM 压缩隐藏状态空间进行通道混合、单头设计减少内存操作,提升目标检测效率与精度

本文记录的是利用模块优化的目标检测网络模型。EfficientViM Block(基于隐藏状态混合器的状态空间对偶性模块) 的设计旨在,提升特征提取效率,同时兼顾全局依赖捕捉与局部细节保留。本文将深入研究的原理,并将其应用到中,通过重构特征提取流程、减少内存绑定操作、融合多阶段特征,增强模型在资源受限环境下的检测性能与速度。EfficientViM: Efficient Vision Mamba with Hidden State Mixer based State Space DualityEfficie

Limiiiing的博客 401

指针进阶之数组指针和指针数组

指针进阶之数组指针和指针数组,超详细,不会来看

人生得意须尽欢 7954

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

指针数组和数组指针的区别和用处

“数组指针”和“指针数组”,其本质只要看最后的后缀 数组指针:是一个指针,指向数组的指针。 指针数组:是一个数组,装着指针的数组。

m0_74234485的博客 6669

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

指针数组和数组指针

int *p[n]:根据优先级,先看[],则p是一个数组,该数组是一个int *型,因此数组的元素是指针类型,共n个元素。int (*p)[n]:根据优先级,先看括号内,可知p是一个指针,这个指针指向一个一维数组,数组长度为n。第二,指针变量可以赋值。对于语句“int*p[5]”,它是一个指针数组,该数组包含 5 个int*型的指针,如图所示。第一,“指针”是一个变量,用于保存一个地址,这个地址的数据类型在定义指针变量时确定。a 和 &a 的数据类型不同,前者是指向数组首元素的指针,后者是指向数组的指针。

m0_56878426的博客 2404

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

函数指针和指针函数以及数组指针和指针数组区别

函数指针(指向函数的指针) 与数据项类似,函数也有自己的地址。函数的地址是存储其机器代码的内存的开始地址。例如,可以编写将另一个函数的地址作为参数的函数,这样第一个函数将能够找到第二个函数,并运行它。与直接调用另一个函数相比,这种方法显得很笨重,但它允许在不同的时间传递不同函数的地址,这意味着可以在不同的时间使用不同的函数。 函数指针的用法需要以下三个步骤: 获取函数的地址 声明一个函数指...

一丁的博客 2987

理解 一级指针 二级指针 指针和数组 指针数组

理解 一级指针 二级指针 指针和数组 指针数组 一级指针 指针是编程语言中的一个对象,它的值直接指向存在电脑存储器另一个地方的值, 由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元。 因此,将地址形象化的称为“指针”,意思是通过它能找到以它为地址的的内存单元 指针是变量,用来存放地址的变量 int main() { int a = 10; int* p = &a; ...

PNUHC的博客 428

指针数组 和 数组指针(指向数组的指针)

指针数组的本质是==数组==,其**元素都是指针**。这种数据结构常用于管理多个字符串或多个内存地址。以下是两个示例,展示了指针数组的使用方法。 数组指针的本质是==指针==。它指向数组的首地址,可以通过计算来指向其他的元素(计算方式类似于数组),因此可以认为它是指向数组中元素地址的指针,因为指向的是地址,所以==在取值操作时时要使用两次取值操作符`“*”`==*(这里不理解的可以看看文末“ 四、数组指针和数组元素的关系”的代码)*。

qq_74871667的博客 3509

C语言——数组和指针,数组指针,指针数组

数组和指针,数组指针,指针数组1.数组和指针关系及基本使用通过指针进行运算2. 数组指针(也称行指针)定义3.指针数组定义指针优先级4.指针数组和数组指针的区别 1.数组和指针 关系及基本使用 数组是一个数据的集合,它在内存中的体现是一个连续的内存区域。如果当前声明的int类型数组,数组类型为3,这样我可以用一个int类型的指针,指向一个首地址,这样就可以通过指针操作数组了 #include&...

weixin_43912367的博客 1742

C++的指针数组、数组指针和指针数组指针

类型例子本质常见用途指针数组数组(元素是指针)存多个字符串数组指针指针(指向数组)处理二维数组指针数组指针指针(指向指针数组)动态修改指针数组。

qq_44815135的博客 704

指针数组和数组指针、字符指针

指针数组和数组指针、字符指针区别和联系

weixin_44057803的博客 1275

c++中的指针数组和数组指针

一、指针数组和数组指针的内存布局 初学者总是分不出指针数组与数组指针的区别。其实很好理解: 指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。 数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。 下面到底哪个是数组指针,哪个是指针数组呢: A...

朋朋の优快云博客 313

数组和指针的区别,指针数组和数组指针

1、首先我们都知道数组名相当于一个指针指向数组的第一个元素,但两者是某真正的相等呢?不是。 下面我们来看下他们的区别:数组名只是一个地址,而指针,是一个左值。 什么意思,看下面这段代码: 运行的结果是错误的,报错为:error: lvalue required as increment operand #include <stdio.h> #include <stdli...

Xieyp040的博客 568

数组指针和指针数组的区别

数组指针(也称行指针) 定义 int (*p)[n]; ()优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是n,也可以说是p的步长。也就是说执行p+1时,p要跨过n个整型数据的长度。 如要将二维数组赋给一指针,应这样赋值: int a3; int (*p)4; //该语句是定义一个数组指针,指向含4个元素的一维数组。 p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0] p++; //该语句执行过后,也就是p=p+1;p跨过

weixin_45605787的博客 979
上一篇: Dev-c++ 4:创建项目,编译多个源文件
下一篇: 字符数组、字符串和指针
hellohelloe
博客等级 码龄8年 18粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值