函数参数传递、数组指针、二级指针、左值、引用

数组和指针的区别

  1. 数组内地址一定连续,指针则不一定连续。
  2. 数组赋值要么初始化就设定,要么循环元素赋值。而指针随时可以赋值(改变指向)。
  3. 数组的存储空间,不是在静态区就是在栈上。指针位置随意。
  4. sizeof(数组名)= 元素个数*sizeof(元素类型) 字节;而sizeof(指针) = 4字节(32位平台) 或 8字节(64位平台)
  5. 可以把二维数组数组名看作一个二级指针常量链接
    数组(名)是右值,而指针是左值?
    例:
    在这里插入图片描述
    数组和指针是等效关系不是等价关系,一说指针对象,而数组非对象。

一维数组和指针很多时候可以通用如:
p[i] ⇔ *(p+i)
&p[i] ⇔ p+i

二维数组分配 ※

二维数组(指针)动态分配和释放
malloc工作只是开辟一块你要的内存(连续的),同时返回内存首字节的地址,但是他不限定你内存里的内容,malloc( 5*sizeof(char) ) 只是给你空出一段20字节的内存空间,并且给你他的首地址,而你实际要往内存里装什么,完全通过强制类型转换来限定,比如 int**p=(int**)malloc(n*sizeof(char*))
动态分配基本都要用到指针数组

//二维都已知
char (*a)[N];//数组指针a = (char (*)[N])malloc(sizeof(char *) * m);printf("%d\n", sizeof(a));   //4,指针printf("%d\n", sizeof(a[0]));//N,一维数组free(a);
//二维未知
char **a;//二级指针int i;a = (char **)malloc(sizeof(char *) * m);//分配二级指针空间for(i=0; i<m; i++){a[i] = (char *)malloc(sizeof(char) * n); //分配一级指针空间,不保证a[0],a[1],...a[m]的值连续}printf("%d\n", sizeof(a));    //4,指针printf("%d\n", sizeof(a[0])); //4,指针for(i=0; i<m; i++){free(a[i]);}free(a);
//二维未知,连续内存
//法1(自上而下)
char **a;int i;a = (char **)malloc(sizeof(char *) * m);a[0] = (char *)malloc(sizeof(char) * m * n);//一次性分配所有空间for(i=1; i<m; i++){a[i] = a[i-1] + n;}//采用如上内存分配方法,意味着将a的值初始化为m*n的二维数组首地址,且这块内存连续printf("%d\n", sizeof(a));    //4,指针printf("%d\n", sizeof(a[0])); //4,指针free(a[0]);free(a);
//二维未知,连续内存
//法2(自下而上、逆向思维)double *Array1D=new double[n*m];double **Array2D=new double* [n];for(int i=0;i<n;i++){Array2D[i]=&Array1D[i*m];}delete[] Array2D[0];//或Array1Ddelete[] Array2D;

法2参考
两种方法的差异在于后者需要两个变量名,而第一种由于直接对元素赋值,中间指针数组并不需要命名。

在这里插入图片描述

注意内存的释放都是先释放低级的,再释放高级的
此外,指针数组首地址不等于二维数组首地址,说明指针数组块和二维数组块不是重叠的,都有分配各自的空间。如图:

在这里插入图片描述

二维数组参数传递

传递的三种方法

在这里插入图片描述

指针的偏移量问题

  • 指针的偏移量=指针的当前值+n*sizeof(指针指向的数据类型)
    如    int (*a)[3]={0}; a是一个数组指针,a+1的偏移量是12个字节
    又如在这里插入图片描述

  • 二维数组指针
    在这里插入图片描述

int a[3][4],*p;
p=(int*)a;//将二维数组强制类型转化为一级指针,p++可以到12

左值和右值

左值(lvalue):一个标识非临时性对象的表达式。通常来说,可以将程序中所有带名字的变量看做左值
右值(rvalue):相对的,右值标识是临时性对象的表达式,这类对象没有指定的变量名,都是临时计算生成的。

引用

(1)左值引用
左值引用的声明是通过在某个类型后放置一个符号&来进行的。前文代码中的int & y = x;便是一个左值引用。
需要注意的是,在定义左值引用时,=右边的要求是一个可修改的左值。
(2)右值引用(不常用)
类似于左值引用,右值引用便是对右值的引用,它是通过两个&&来声明的

引用和指针有什么区别

我们知道,指针是在内存中存放地址的一种变量,cpu能够直接通过而变量名访问唯一对应的内存单元,且每个内存单元的地址都是唯一的。
而变量名和引用,都可以看做内存的一个标签或是标识符,计算机通过是否符合标识符判断是否为目标内存,而一个内存可以有多个标识符


参考:https://www.cnblogs.com/Bylight/p/10530274.html

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

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

相关文章

下一个汽车万亿市场打开!氢能源时代正到来

来源&#xff1a;智东西内参看点&#xff1a;中国氢能汽车产业产值有望突破万亿元大关。氢能汽车是以氢为主要能量作为移动的汽车。氢能被视为全球最具发展潜力的清洁能源之一&#xff0c;并被不少国家、车企及学者认为是“终极新能源汽车解决方案”。伴随着汽车保有量持续增长…

高斯噪声和椒盐噪声

clear all;clc;close all; imimread(1.jpg); % oim; [w, h ,z]size(im); imrgb2gray(im); oim;%原图备份 figure;seq0; seqseq1;subplot(2,2,seq);imshow(im);title(原图);posaxis;xlabel(,position,[(pos(1)pos(2))/2 pos(4)]);%高斯噪声 gaunormrnd(0,0.1,w,h); im1im2double…

去苹果浏览器默认样式

去苹果浏览器默认样式 input,textarea,button { -webkit-appearance: none; border-radius:0px; border:none;}转载于:https://www.cnblogs.com/mcdnf/p/5158248.html

李彦宏/王坚/王传福等上榜“中国工程院2019院士增选候选人”引争议,实至名归吗?...

来源&#xff1a;物联网智库导 读五一小长假前一天&#xff0c;中国工程院网站公布了2019年工程院院士增选有效候选人名单。经中国工程院主席团审定&#xff0c;最终确定的有效候选人共531位。值得注意的是&#xff0c;BAT微软比亚迪等高管均上榜。此次中国工程院531名候选人的…

矩阵转置函数——指针自增的陷阱

#include"algorithm.h"int** transpose(int**po, int &m, int &n) {int*p (int*)malloc(m*n*sizeof(int));//转置矩阵空间int**pn (int**)malloc(n*sizeof(int*));//转置矩阵数组指针//指针备份int *save po[0];int *nSave p;//布置转置矩阵// [1 2 3 4 …

号称能自动编程60年,“进化计算”究竟进化到哪一步了?

大数据文摘出品来源&#xff1a;ponderwall编译&#xff1a;stats熊、钱天培大胆想象一下&#xff0c;如果计算机可以自行编写程序&#xff0c;这会为人类带来什么样的变化&#xff1f;与其辛苦研究计算机解决问题的方法论&#xff0c;敲出精准的代码&#xff0c;不如告诉计算机…

动态规划——数塔问题

从原点&#xff08;顶层&#xff09;出发&#xff0c;只能向左或者向右&#xff0c;找到一条路径使得路径上的数字和最大: #include<stdio.h> //#include"algorithm.h" #define N 100int max(int a, int b) {return a > b ? a : b; }int main() {int a[N…

http的get与post方式下的getParameter获取中文

客户端提交某个中文参数&#xff0c;比如a中国 &#xff08;1&#xff09;如果以GET方式提交&#xff0c;在地址栏中&#xff0c;可以看到参数进行了URL ENCODE&#xff0c;形如&#xff1a;a%E4%B8%AD%E5%9B%BD。服务端接收到请求&#xff0c;使用request.getParameter("…

PS填充、仿制图章和修补工具

右下角调整色调后&#xff1a; 概览&#xff1a; 用魔棒工具反选出天空的树枝&#xff0c;然后点 选择-修改-扩展 大致扣出枝丫&#xff0c;再 编辑-填充-内容识别 将空中的树枝ps掉。通过仿制图章工具&#xff08;勾选对齐&#xff09;可以将右下角楼p掉。也可以用修补工具&…

学界 |《nature》杂志:我们有义务搞懂我们所创造出来的技术

来源: AI科技评论一个跨学科的研究小组希望创建一个名为「机器行为」的新学科&#xff0c;以了解人工智能将如何对我们的社会、文化、经济与政治造成影响。在《自然》杂志的一篇评论文章中&#xff0c;作者认为人工智能算法的研究需要扩展到计算机科学以外的领域&#xff0c;纳…

渲染上下文Rendering Context

渲染描述表&#xff0c;包含一次渲染所需的全部数据。用于提交给游戏渲染引擎的渲染器进行渲染 -------------------------------------------------------------------- 如果把渲染引擎看做一个画家&#xff0c;那么画家开始作画之前需要做一系列的准备工作&#xff0c;譬如&a…

高数复习9.13 函数与极限

双曲正切函数图像 反双曲arsh和arch的表达式 arshxln(xx21)arsh xln(x\sqrt{x^21})arshxln(xx21​)   archxln(xx2−1)arch xln(x\sqrt{x^2-1})archxln(xx2−1​) 数列的极限&#xff1a;构造|xn-a|<一个能确定的数&#xff08;表达式&#xff09; 极限存在的证明&…

【深度】从GE工业互联网到中国工业互联网

来源&#xff1a;数字化企业工业互联网自2017年起已成为国内科技界最为火爆的词汇之一。学者、供应商、投资商、企业家、媒体、政府官员、人大代表、政协委员等纷纷给出了自己的解读。一、背景冠名为工业互联网的学术会议此起彼伏&#xff0c;有世界大会、世界峰会、全球峰会、…

LeetCode题——最长无重复子串

题目 给定一个字符串&#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。如&#xff1a; 输入: “abcbabcd” 输出: 4 解释: 因为无重复字符的最长子串是 “abcd”&#xff0c;所以其长度为 4。 思路 一开始容易往暴力遍历的方向想&#xff0c;但是实际上运用窗口的…

透视世界人工智能发展

来源&#xff1a;参考消息、新华网摘要&#xff1a;当今世界&#xff0c;随着人工智能迎来新一轮发展热潮&#xff0c;一个“新智能时代”即将到来。世界大国都把加快发展人工智能上升至国家战略高度&#xff0c;以抢占新一轮科技革命和产业变革的制高点。“透视世界人工智能发…

[链接]最短路径的几种算法[迪杰斯特拉算法][Floyd算法]

最短路径—Dijkstra算法和Floyd算法 http://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html Dijkstra算法&#xff08;单源最短路径&#xff09; http://www.cnblogs.com/dolphin0520/archive/2011/08/26/2155202.html转载于:https://www.cnblogs.com/lyggqm/p/…

半导体行业必将再火十年!两大趋势成发展新动能

来源&#xff1a;智东西看点&#xff1a;汽车半导体和人工智能芯片为半导体市场带来了新的发展机遇。当前&#xff0c;我们使用的许多前沿数字化设备背后的技术都要依靠半导体才能实现。 由于无人驾驶、人工智能、5G和物联网等新兴技术的发展&#xff0c;以及对技术研发的持续投…

batch批处理程序easyadd——追加单行文本到指定txt文件末尾

介绍 有时候需要打开记事本在末尾追加文本&#xff0c;如果手动找到txt文件&#xff0c;再打开txt文件&#xff0c;按 ctrlhome 到达文末&#xff0c;才能完成对txt文件的追加&#xff0c;比较繁琐。而且如果txt文件很大&#xff08;比如词典文件&#xff09;&#xff0c;手动…

短信备份(原)

昨天在学习回调的时候&#xff0c;发现了其独特的魅力之处&#xff0c;它将业务代码逻辑和我们的工具类耦合性大大降低了。 应用场景&#xff1a;在实际开发中&#xff0c;经常会随着用户的需求的改变而对对话框的样式进行相应修改&#xff0c;在短信的备份过程中&#xff0c;往…

今年的谷歌I/O大会,或许会有这些东西

来源 | 网易科技据国外媒体报道&#xff0c;当地时间5月7日&#xff0c;2019年度谷歌I/O开发者大会将在加州的海岸线圆形剧场(Shoreline Amphitheater)举行。届时&#xff0c;包括谷歌首席执行官桑达尔皮查伊(Sundar Pichai)等公司高管将登台发表演讲。谷歌将在本届开发者大会上…