数组与指针的关系

指针,截指针,数组指针,指针数组,指针与数组关系 换句话说,swap里的a,b和main函数的a,b是不同的(就像世界上同名的人有很多),这里的a,b也不是一个。定义:数组指针实际上是一个指针变量,指向数组的指针变量(数组的指针),指向的是整个数组。int(*p)[4]变量类型可以看成int[4],int[4]+1并不是添加一个字节而是添加整个数组的大小,4个int=4*4=16bit,所以说int[4]+1会跳过16个字节。*p单独出现,前面没有类型(如上文里的int)就是解指针,如代码里p=&a,说明p存的是a的地址,*p就可以获取a的值。 阅读详情

数组与指针的关系咋一看,真的很让人头疼,但是仔细研读相关资料后再总结下,其实也并不是很复杂,大致如下:

一、指针与一维数组

先定义个数组int array[3]={1,2,3};一个指针int *p;

想象下,定义一个数组相当于在内存中开辟了三块连续的、可以分别存放三个整形的、占四个字节的空间,

而常量array其实就是一个指针,指向第一个整形的地址(即&array[0]),array+1则指向第二个整形的地址(即&array[1]),

&array则是指这个数组的首地址(虽然数值上等于array),但它是把整个数组看成一个数据,因此&array+1指向的是下一个数据,而不是&array[1];

这里说的看成一个数据就是把整个数组看成一个整体,比如m=1,&m就是内存中存放数据1的地址,而&m+1就指向了下一个数据,这里的数据1就是一个整体的数据;

把数组看成一个数据也就相当于整个数组看作1或者其他常量这种单独数据;

另外,有趣的是,数组其实可以看作一个有变量连续存储的内存地址,指针也就是这块连续变量的第一个变量的地址,

例子:

#include <stdio.h>

int main(void) { 
	int a=1,b=2,c=3,*d;
	d=&a;
	printf("Short1=%d  %d  %d",d[0],d[1],d[2]);
};
运行结果为:Short1=1  2  3  

注:1、array和&array是常量,不能赋值,所以自加自减也不行!!!但把array赋值给一个指针变量,指针变量可以被赋值和自增自减;

2、指向一个数组中两个数据的指针的相减值为他们之间的元素个数(原因很简单,指向数组array的第一个元素的指针为array,指向第二个元素的指针为array+1,因而array+1-array=1,刚刚好,不是么生气)






Windows 11安装realtek audio control Windows 11安装realtek audio control,解决无法链接RPC问题 阅读详情

相关推荐

5分钟搞懂深度学习如何革新声源定位:从GCC-PHAT到DNN的实战对比

本文深入对比了深度学习与传统GCC-PHAT方法在声源定位领域的实战表现。通过具体实验数据,展示了DNN模型在强混响、低信噪比等复杂场景下,如何实现定位准确率的显著提升,并探讨了其数据驱动范式带来的鲁棒性优势与工程部署挑战。

3a9bq4r8t2y的博客 223

指针与数组的关系

1,数组是一块内存连续的数据。 2,指针是一个指向内存空间的变量。 对于数组来说,数组的首地址,也可以用指针来表示操作,如: int a[10]; int *p,n; p = a; 对第一个元素取值,可以用几种方法: n =a[0]; n = *p; n = p[0]; n = *(p+0) ; 3,不同的地方是数组是由编译器分配的空间,变量名是不能再赋值的;而指针是可以重复赋值的(除定义为con...

duzzle2016的博客 1496

从零到一:基于GeneMark-ES/ET的新基因组注释实战指南

本文提供了一份基于GeneMark-ES/ET的新基因组注释实战指南。详细介绍了从环境搭建、数据准备到核心运行的全流程,重点解析了ES(从头预测)与ET(结合RNA-Seq证据)两种模式的选择与操作,并分享了Perl模块依赖、并行处理等常见问题的解决方案,帮助生物信息学研究者高效完成基因预测工作。

weixin_29266647的博客 209

指针与数组

指针与数组 1.指针与数组的关系 指针和数组是密切相关的。当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。如: char str[20], *ptr; ptr=str;//指向数组元素的指针 ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之不成立),这样原来对数组的处理都可以用指针来实...

shuijinghua的博客 2698

ARM和FPGA之间的通信(硬件原理图篇)

设计该开发板的初衷是为了学习,但也希望今后能扩展其功能,看到大家都在diy示波器,自己也非常冲动的想DIY一把,于是呼选了arm+fpga的方案,fpga主要用来实现数据的高速采样,而ARM则提供数据的显示,以及一些人机交互的功能。那么该方案中最重要的地方就是ARM和FPGA之间的通信如何实现了。在网上查了很多的资料,有说将FPGA作为ARM的一个外设,可以通过DMA的方式来直接访问;也有说把FP

屌yy的博客 5万+

解锁SPWM电压利用率:三次谐波注入幅值的黄金分割点

本文深入探讨了SPWM电压利用率的提升方法,重点介绍了三次谐波注入技术及其黄金分割点(1/6比例)。通过数学推导和工程实践,揭示了如何通过特定幅值的三次谐波注入将电压利用率从86.6%提升至115%,与SVPWM相当。文章还提供了实验室调试流程和DSP实现代码,帮助工程师优化逆变器设计。

weixin_30729609的博客 915

数组与指针关系

数组与指针的关系

qq_41727421的博客 4990

SAP_SD模块路径及运输功能后台配置简介

后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义传输模式根据实际运输过程运输地理的类型:海运、公路运输、空运后台路径:SPRO—后勤执行—装运—基本发运功能—定义路线—定义发运类型根据实际运输过程运输方式:汽车、卡车、火车、轮船、飞机后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义运输连接点指在运输过程中需要中转的地区可以维护中转地区的停留的时间后台路径:SPRO—后勤执行—装运—基本发运功能—路径—定义路线—定义路径和阶段。

我小时候很黑的博客 1397

十一:数组和指针的关系?

十一:数组和指针的关系:区别和联系;

qq_26538113的博客 3828

基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真

新能源微电网是现代电力系统的重要组成部分,能够有效整合分布式能源(如光伏、风力发电)和储能设备,实现局部区域内的能源高效利用。微电网的运行控制涉及多源能量管理、负荷平衡以及并网/孤岛模式切换等关键问题。基于MATLAB/Simulink平台进行新能源微电网运行控制的建模与仿真,可以帮助研究者验证控制策略的有效性,并优化系统的动态性能和经济性。本项目旨在构建一个完整的新能源微电网模型,包括电源模块、储能模块、负荷模块以及控制器模块,并通过仿真分析其运行特性。

xiaoheshang_123的博客 421

带有HSE组件的S32系列芯片中各子系统如何依次启动?

仔细阐述了上电后各个子系统的启动顺序,并给出了详细的启动步骤流程图。

车载系统攻城狮 1702

指针与数组的关系及运算

一、概念: 1.1、指针:指针变量p的值是地址,“*”为取数据符,*p表示取p所指向的地址中的数据,“&”为取地址符。 1.2、数组:数组是用于储存连续多个相同类型数据在内存中的集合。 1.3、指针与数组的关系:指针变量p是个地址,而数组的数组名a也是个地址,从而可以这样赋值p=a,由此衍生的指针数组、数组指针所产生的表达式及运算千变万化,经常看到一个表达式都不知道,最终所求的值是地址还是数据。网络上看了好多推演的教程,也思考了很久,但看到好多推演断层式的表达式,还是想不明白。最终自己找...

oO斯曼的博客 7078

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

指针与数组的基本关系

指针与数组在C语言中有着密切的关系。理解它们之间的联系不仅可以帮助我们更好地掌握C语言的基础知识,还能提高代码的灵活性和效率。通过合理使用指针和数组,我们可以更高效地处理内存和数据结构。希望本文能够帮助你深入理解指针与数组的关系及其应用。如果你有任何疑问或需要进一步探讨,请随时留言交流!

2501_90303633的博客 1869

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

深度学习工具包 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")

二级指针与指针数组之间不清不楚的关系

在初次学习指针的时候,无论是初始化一维数组(下面的func函数),还是访问一维数组(showArr函数),发现一维数组名与一级指针有着强烈等价的关系。于是二维数组与二级指针有这强烈的关系的思想便油然而生,然而事实上,二维数组与二级指针没有半毛钱的关系。 (1)一维数组与一级指针的关系不必说,直接看代码: #include <stdio.h> #include <stdlib...

qq_36065506的博客 612

指针变量与数组的关系及什么是指针数组

指针变量与数组的关系及什么是指针数组: 一维数组: 数组原本就是以指针的格式使用的,数组名a相当于char * const a。但这里需要注意的是数组名表示的是一个数组的首地址,是一个地址常量,不能给地址常量赋值,但能改变该地址所指向的内容,比如之前a首地址存放的内容为1,可以使用a=2改变该地址单元里的内容。 在输出数组元素的值时一般以a[0]形式输出,该a[0]形式相当于a、*(a+0)。...

u013581207的博客 4763

二维数组与指针的关系详解

静态二维数组与指针 我们定义一个二维数组int a[3][4]。 二维数组实际是由多个一维数组组成,在这里,a[3][4]就是由3个长度为4的一维数组组成的二维数组。并且它们在空间上是连续的,相当于一个长为12的一维数组。 数组类型说明 a的类型为int(*)[4],数组指针(后面动态数组还会出现指针数组,注意区别),是指向第一个一维数组的指针,即a所指向的类型为一个一维数组。 ...

qq_40692109的博客 7216

浅谈指针与数组的关系

1、实际上并不存在多维数组,所谓的多维数组本质上是用一维数组模拟的。 2、数组名是一个常量(意味着不允许对其进行赋值操作),其代表数组首元素的首地址。 3、数组与指针的关系是因为数组下标操作符[],比如,int a[3][2]相当于*(*(a+3)+2) 。 4、指针是一种变量,也具有类型,其占用内存空间大小和系统有关,一般32位系统下,sizeof(指针变量)=4。 5、指针可以进行加减算术运算...

qq_21110983的博客 3104

指针和数组的关系,指针和函数的关系

指针和数组的关系,指针和函数的关系 1、指针和一维数组的关系 int arr [10] = {1,2,3,4,5,6,7,8,9,0}; 数组名是一个指针常量,表示数组第一个元素的的起始地址。 如 int a[5]; a表示数组第一个元素a[0]的起始地址&a[0]。 换句话说:数组名就是数组的首地址。 arr[0] = 1; arr[2] = 3; arr[1] = 2; arr[...

qq_45510453的博客 687

指针与数组的关系解析

数组名在大多数场景下会被隐式转换为指向数组首元素的指针(地址),且这个指针是(不可被修改)。无论是通过数组下标还是指针偏移,最终都会被编译器转换为 “基地址 + 偏移量” 的内存访问。例如访问第 3 个元素(下标为 2):这种兼容性使得在函数参数中,数组会被自动退化为指针。例如函数void func(int a[])与void func(int* a)完全等价,函数内部无法通过sizeof(a)获取数组长度(只能得到指针大小)。

2401_85199775的博客 666

c语言中数组与指针的关系

/来源网络,仅限个人学习记录适用/ 指针与数组是C语言中很重要的两个概念,它们之间有着密切的关系,利用这种关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之间的联系及在编程中的应用。   1.指针与数组的关系   当一个指针变量被初始化成数组名时,就说该指针变量指向了数组。 如:   char str[20], *ptr;   ptr=str;   ptr被置为数组str的第一个元素的地址,因为数组名就是该数组的首地址,也是数组第一个元素的地址。此时可以认为指针ptr就是数组str(反之

hh_buddy的博客 4652

【C】数组和指针的关系

数组和指针的关系

weixin_44939430的博客 915

数组和指针的复杂关系

C语言中指针和数组的关系似乎很“纠结”,让人爱恨交织。本文试图帮助读者理清它们之间的复杂关系!

2401_83276999的博客 1371
上一篇: 解决数学题的编程思路
下一篇: 关于python编码问题总结
THMAIL
博客等级 码龄10年 2434粉丝 432原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

THMAIL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值