C++中的数组和指针

C++中一维数组和二维数组中的指针总结 首先区别清楚指针数组和数组指针的区别 以名字后面的两个字定性: 1.指针数组是一个数组,存贮着指针类型的变量,例如: int *a[10]; 因为[]的优先级大于*,故首先是一个含有10个元素的数组,数组中的元素是指向int类型的指针; 2.数组指针是一个指针,指向的对象是一个数组,例如: int (*a)[10]; 因为()的优先级大于[],故先确定a是一个指针,指向的数据类型... 阅读详情
C++中的数组和指针
 
先看两个定义(声明)
int* aryp[10];
int (*pary)[10];
 
aryp 是一个10个元素的数组,数组中元素类型为int*
pary 是一个指针,是指向数组的指针,这个被指的数组的类型为 int[10]
这样看pary的定义会clear一点
 
typdef int INT_ARY_TEN[10];
INT_ARY_TEN* pary;
 
C++是一种强类型(strong typed)语言,C++中有一组特殊的type:数组
数组的类型不单只跟元素的类型相关,还与元素的个数相关。
int aten[10];
int anine[9];
 
则 aten 的type 和 anine 的type 是不一样的,
aten的类型为 int[10], anine的类型为 int[9],而不是通常认为的int* const,
尽管我们确实可以把它当作int* const 用。这点跟Java不一样,在Java中他们两的类型都是Array
 
数组类型还有一个特殊之处,他们不能作为函数的参数和返回值类型
void foo(int arg[10]) {
}
arg的类型其实是int* const,跟那个10一点关系也没有,甚至[]里不写任何东西都没有关系。
这也是为什么有人说数组名就是常量指针的原因。
 
除了函数,数组还不能作为typeid的参数
typeid(aten).name() 是会返回 "int*" 的
正是因为这个原因
typeid(aten) == typeid(anine) 会返回true
aten, anine在传进去的时候,类型都变成 int* const了 (typeid不记录常量信息,所以cosnt去掉了)
 
既然数组也是一种类型,则由*操作符就可以定义另外一种类型:指向数组的指针,例如开始的那个pary,可以这样定义
 
int (*pary)[10] = &aten;
而
int (*pary)[10] = &anine; 是不合法的。
编译器抱怨说:cannot convert from 'int (*)[9]' to 'int (*)[10]'
【C语言数组与指针】——深入理解C++中的数组和指针 而指针则是存储了内存地址的变量,可以指向任何数据类型的变量或对象。C++中的数组和指针是非常强大的数据类型,可以在底层高效的处理大量数据。需要注意的是,数组下标从0开始,而指针必须指定指向的数据类型。同时,指针也可以用于操作数组中的元素,并且还可以声明数组指针来指向数组。需要注意的是,C++数组的下标从0开始,而不是从1开始,因此第一个元素的下标为0。在C++中,数组是由相同数据类型的元素组成的序列。C++中的指针是一个变量,它存储了另一个变量的内存地址。需要注意的是,指针声明时必须指定指向的数据类型。 阅读详情

相关推荐

字符串相似度比较算法:Jaro–Winkler similarity的原理及实现

前言 在前面的文章中,笔者有对编辑距离以及Levenshtein距离进行详细的说明,其实levenshtein距离是编辑距离的其中一种定义,本文所说的Jaro距离是编辑距离的另外一种定义,它也是对两个字符串的相似度进行衡量,以得出两字符串的相似程度。下面我们一起来学习这个算法的原理以及实现吧。 标题算法定义 下面先说说Jaro distance(又称Jaro similarity),这是由Matt...

蓝天白云梦的csdn博客 1万+

c++程序设计基础(第五版)(上) 习题与解答

习题与解答 C++程序设计基础(第5版)(上) 习题与解答 第1章练习题 同步练习1.1 一、选择题 1.一个最简单的C++程序,可以只有一个( )。 (A)库函数 (B)自定义函数 (C)main函数 (D)空函数 2.函数名是( ),用于识别和调用函数。 (A)关键字 (B)标识符 (C)常数 (D)语句 3.用C++语言编写的源程序要成为目标程序必须要经过( )...

bueke的博客 12万+

模拟IC版图DRC实战:手把手教你搞定MIM电容天线错误和ESD.10g违例

本文深入解析模拟IC版图中的MIM电容天线错误和ESD.10g违例问题,提供从错误解码到实战修复的完整指南。通过电路图修改、版图优化和验证闭环等步骤,帮助工程师高效解决DRC错误,特别适用于ADC等精密模拟电路设计。文章还分享了高级排错技巧和预防性设计策略,大幅提升流片成功率。

weixin_27697385的博客 295

C++中的指针、引用和数组

C++中对于指针、引用和数组使用时,充斥着 * 、& 、[]符号,对于像我这样的初学者面对这些符号难免会陷入混乱。这篇文章是在《21天学通C++》第8章内容基础上,进行总结和提炼,以方便自己和网友们回顾使用。

阿根的专栏 1433

ZYNQ实战:PS端驱动DMA实现高效数据流转与验证

本文详细介绍了在ZYNQ平台上通过PS端驱动DMA实现高效数据流转的实战方法。从ZYNQ的PS与PL数据交互基础出发,深入解析DMA核心价值,包括硬件平台搭建、Vivado配置、PS端软件架构设计及性能优化技巧,帮助开发者提升数据传输效率与系统性能。

weixin_29192141的博客 436

基于STM32F407的DDS信号源设计与实现:DAC+DMA+TIM的高精度波形生成

本文详细介绍了基于STM32F407微控制器实现高精度DDS信号源的完整方案。通过结合DAC、DMA和TIM外设,并运用DDS算法,实现了分辨率高达0.001Hz的波形生成。文章深入剖析了相位累加器、波表查表等核心原理,提供了从CubeMX配置到代码实战的完整指南,并探讨了性能优化与高频输出问题的解决方案。

weixin_29193259的博客 502

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

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

qq_25652139的博客 3万+

苹果搜索广告ASA开户教程

阅读导航 一、创建账号 1、登录网站 2、填写账号主体信息 3、填写商家和发票信息 4、选择付款方式 二、上传审核材料 1、上传文件 2、请求审批 3、上传文件中的常见问题 一、创建账号 1、用Apple ID登录ASA网站 首先我们进入开户网址:https://app-ads.apple.com/ 如果已拥有Apple ID,直接登录即可,如果没有Apple ID,可以先按照步骤创建Apple ID,再返回登录。 注意,这里登录的Apple ID也有讲究: ① 如果是开发

testflight121的博客 2128

C++中new和delete在数组指针和指针数组中的调用

首先,先区分下数组指针和

指月的手指,成不了月亮,更得不到月亮!! 1万+

innovus:Clock Gating Check设置与报告

看图后发现,在设置clock gating check之前报告也会有clock gating check的值,这个就是因为timing library中会像reg一样定 library setup time值,如下图。我们常用set_clock_gating_check -setup去过约束Place阶段reg2cgate的时序,以防CTS后由于tree不平导致的时序违例。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1011

基于DPCNN实现电商情感分析任务

下载链接项目中使用的模型是DPCNN,在模型中我们定义了三个组件,分别是embedding层,卷积层和全连接层。Embedding层:将每个词生成对应的嵌入向量,就是利用一个连续型向量来表示每个词卷积层:提取语句中的语义信息Linear层:将结果映射成2大小用于二分类,即正反面的概率。

优快云 精品推荐 1629

c++中的数组和指针,引用

按大类可以分为:   1.数组:      1.类中的数组,类中的数组被当作一组变量来看待。      2.函数参数中的数组,形参数组被当作是指针。      3.new 和 delete 意思是释放指针所指向对象所占的内存空间,然后调用构造和析构函数。      4.如果指针是一组数:           int * p=new int[n];        那么必须调用对应的:

daojin505的专栏 477

QLineEdit控件: 实现IP地址输入框(基于编辑信号)

在开发网络应用程序时,经常需要用户输入IP地址。直接使用普通输入框容易导致格式错误,用户体验也较差。本文将手把手教你用Qt的QLineEdit控件实现一个智能IP地址输入框。即使你是刚接触Qt的新手,也能通过本文理解核心实现原理。

u011186532的专栏 650

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

using namespace std; int main(){ //a) 一个整型数( An integer) int a; //b) 一个指向整型数的指针( A pointer to an integer) int *b; //c) 一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an ...

geerniya的博客 4559

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

C/C++中的const;指针数组;数组指针;迷途指针;空指针和迷途指针的区别;C++中已经有了malloc/free,为什么还需要new/delete?

//分文件 //在C情况下 #pragma once const int a = 10; #include<stdio.h> int main () { extern a; printf ("%d",a); return 0; } //在C++情况下 #pragma once extern const int a = 10; #include<iostream>...

weixin_43767691的博客 207

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

C++中的二维数组和指针

code1: int a[2]={1,2}; int * p=a; code2: int a[2][5]={1,2,3,4,5,6}; int * *p=a; 以上两份代码中,第一份不会报错,但第二份会报错,因为p是int * *类型,而a是int (*) [5]类型。 第二份代码中,如果使用cout输出a,a[0]和&a[0][0],会发现三者的值一样,再输出*a,会发

aiaiai010101的博客 444

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C++数组和函数中的指针

一、指针与数组 1、数组:数组是一段连续的空间,数组名表示空间第一个元素的地址。 2、指针:指针包含两个内容,一个是内存地址,这个大小和机器长度有关;另一个是指针类型,这个跟指针定义的类型有关。 int arr[2][3] = { { 1, 2, 3 }, { 4, 5, 6 } }; int (*p1)[3] = arr; int (*p2)[2][3] = &

一蓑烟雨任平生 也无风雨也无晴 2533

C++中的*、&、指针、引用、数组名和二维数组名的含义

C++中的*、&、指针、引用、数组名和二维数组名,对于初学者来说,很难理解,尤其是C语言掌握不好的人来说。 一、*、&、指针、引用 int a = 1024; int *ia = &a; //&在右边,叫作取地址,&a是变量a的地址 int &b = a; //&在左边,叫作引用,b和a一样 cout << "&a =

u011895157的博客 3529

C/C++中的指针数组和数组指针

1. 指针数组   定义:int *p[n],由于[]的优先级高于*,p和[]结合成一个数组,该数组的元素存储的是int类型的指针,由于数组内容是指针,因此p+1的步长是sizeof(int*),在32位机器上,步长通常是4个字节;   int a[3][4];   int *p[3]; // 指针数组,具有3个类型为(int*)的元素;   p[0] = a[0]; // 将第...

dcbu70586的博客 110

C++ primer 读书笔记系列——(3)C++中的数组和指针

     c++语言提供了两种类似于vector和迭代器类型的低级符合类型——数组和指针。与vector类似,数组也可以保持某种类型的一种对象,而他们的区别在于,数组的长度是固定的,数组一经创建,就不允许添加新的元素,指针则可以像迭代器一样遍历和检查数组中的元素。     现代c++程序应尽量使用vector和迭代器两种类型,而避免使用低级的数组和指针,设计良好的程序只有在强调速度时才在类内部使用数组和指针!     数组是C++中类似于标准库vector的内置数据结构。与vector类似,数组也是一种存储

酋长Clement ——成长之路 700

什么是C++中的指针和引用?它们有什么区别?/ 数组名和指针(这里为指向数组首元素的指针)区别?

首先,从类型上看,数组名表示整个数组本身,是一个不可修改的常量指针,它包含的是数组第一个元素的地址。再者,从操作上看,数组名作为常量指针,不能作为左值被赋值,但可以通过下标进行索引来访问和修改数组的元素。总的来说,数组名和指向数组首元素的指针虽然有时可以互换使用,但它们在类型、大小、操作和内存布局等方面存在明显的区别。在C++中,指针和引用都是重要的概念,它们用于处理内存地址和变量之间的关系,但两者之间存在明显的区别。最后,从内存布局上看,数组在内存中占据一块连续的空间,而指针则只占据一个存储地址的空间。

wssc63262的博客 385

C++中的字符串指针和字符数组

字符串可以用字符数组与字符串变量两种方式来存储,效果类似。 一、用字符数组来存储字符串: char st1[100],st2[100] ; //字符数组说明 cin>>st1>>st2; long a,b; 输入:hello,  world 则st1={‘h’,’e’,’l’,’l’,’o’,’,’,’\0’} st2={‘w’,’o’,’r’,’l’,’d’,’\0} 字符’\0

a2796749的专栏 728
上一篇: 令人迷惑的const和指针的组合
下一篇: 临时对象
fat_how
博客等级 码龄26年 0粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值