怎么物理存储上怎么解释这道题? 实参的null和形参的null是指向的同一个地址吗?

怎么物理存储上怎么解释这道题? 实参的null和形参的null是指向的同一个地址吗?

public class Test{
    public static void main (String[] args){
         List<String> a = null;
        test(a); 
        System.out.println(a.size());
    }
    public static void test(List<String> a){
         a=new ArrayList<String>();
         a.add("abc");
    }
}

0

1个回答

形参出现在函数定义中,在整个函数体内部都可以使用,离开该函数则不能使用。实参出现在主调函数中,主调函数中调用一个函数时,函数名后面括号中的参数称为实参。

2、函数调用中发生的数据传送是单向的,只能把实参的值传送给形参,但改变形参的值并不可以改变实参的值。

3、如果在调用函数的过程中传给函数的不是指针,在被调用函数运行时,形参和实参是不同的变量,它们在内存中位于不同的位置,形参将实参的内容复制一份,在该函数运行结束的时候形参被释放,而实参内容不会改变;如果在调用函数的过程中传给函数的是指针,调用后指针形参会改变实参的对象,但依然不会改变实参。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C语言指针初始化与NULL时作为实参传入函数中出现的问题
先看一段代码:void function(int * exp) { ............. } int main(int argc ,char * argv[]) { int *tmp = NULL; function(tmp); ......... return 0; } 笔者测试过,无论在function中怎么最tmp进行操作,都不会...
不能通过改变形参指针的值(形参所指向的地址)来改变实参指针的地址,实现改变实参指针所指向地址变量的值。
1、尤其是指针参数,尽量使用assert宏做入口校验, assert函数功能及用法!   assert(NULL != strDest); 2、典型的递归方式计算字符串长度 int my_strlen( const char* strDest ) {    assert(NULL != strDest);    if ('\0' == *strDest)    {      retu
指针变量作为函数参数为了改变指针变量指向实参的值
转自百度知道: 思考:为什么两个运行结果不同 C语言使用值传递时,仅仅将实参的值传递给形参。 对于第一种写法 main函数传递给Swap函数的是&amp;a和&amp;b的值,即a和b所在的地址的值 那么Swap函数里面通过*x来更改的就是&amp;a所在的地址里面的值,也就是a本身的值了,所以第一种写法main函数调用Swap函数之后,a和b的值会发...
形参与实参&值传递和地址传递
1、形参变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量。 2、实参可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值。 3、实参和形参在数量上,类型上、顺序上应严格一致,否则就会
关于函数实参和形参的地址传送
void swap(int a,int b) { int i; t = a; a = b; b= t; }int main() { int i = 5; int j = 6; printf("交换前: i = %d,j = %d\n",i,j); swap(i,j); printf("交换后: i = %d,j = %d\n",i,j); retur
当几个引用指向同一个java对象的时候,用什么办法能让这几个引用都变成 null?
csdn上有讨论:http://bbs.csdn.net/topics/260077332
关于指针地址做实参,形参需用指针的指针
先看段代码 include &amp;lt;stdio.h&amp;gt; #include &amp;lt;stdlib.h&amp;gt; #include &amp;lt;string.h&amp;gt; void memoryInit(char **str) { *str = (char *)malloc(sizeof(char) * 20); } int main() { char *ptr = NULL; ...
形参和实参的理解练习
形参和实参java 版public class TestNum { public int addNum(int a,int b){ int sum = 0; sum = a + b; a = a + 1; b = b + 1; System.out.println("形参 a="+ a + ",形参 b=" +
形参和实参的比较
1、形参出现在函数定义中,在整个函数体内部都可以使用,离开该函数则不能使用。实参出现在主调函数中,主调函数中调用一个函数时,函数名后面括号中的参数称为实参。 2、函数调用中发生的数据传送是单向的,只能把实参的值传送给形参,但改变形参的值并不可以改变实参的值。 3、如果在调用函数的过程中传给函数的不是实参的地址,在被调用函数运行时,形参和实参是不同的变量,它们在内存中位于不同的位置,形参将实参的...
以指针作为实参的问题
以指针作为实参时,实参p传递给形参p1的其实是p的拷贝,所以在局部函数中改变形参p1的指向对身处主函数的p是无影响的,但是因为p1是p的拷贝, 所以他们的指向是相同的,所以可以通过p1修改了那块内存的值。如果实参p的指向为空,也就是说p是一个空指针的话,那么它就没有指向某块内存, 形参也就无法操作p所指向的内存了(因为p本就没有指向任何一块内存),即使p1在局部函数中指向了一个malloc的空...
对实参与形参之间数据传输的一些理解(指针指向、存储位置)
首先我们先通过一题来了解一下实参与形参间值传递的方式。例题1:void Getmemory(char *p) { p=(char *)malloc(100); } int main() { char *str=NULL; Getmemory(str); strcpy(str,&quot;hello!&quot;); cout&amp;lt;&amp;lt;str&amp;lt;&amp;lt;endl; } ...
形参值的改变不会影响对应的实参的值
#include void swap1(int *p1,int *p2){         int temp;         temp = * p1;         *p1 = *p2;         *p2 = temp; } void swap2(int *p1,int *p2){         int * temp;         temp =
形参和实参,以及在内存中的分配
C#中有两种类型的数据,一种为值类型;另一种为引用类型。 值类型:int、char、float、long、bool、double、struct、enum、short、byte、decimal、sbyte、uint、ulong、ushort等 引用类型:string、class、interface、delegate、object等 他们最大的区别就是存储的位置不同,前者值类型存储在内存的栈
形参与实参(从系统堆栈的角度理解)
#include &amp;lt;stdio.h&amp;gt; int *exchange(int one, int another);void fun();void realExchange(int *, int *); void realExchange(int *one, int *another) {   inttmp;      tmp= *one;          // 将one所指向的空间的值,...
值类型和引用类型,形参和实参,传值和传引用
C# 中有两种类型:引用类型和值类型。 传值,传引用——多角度论述,力求清晰、准确
Java参数引用传递之例外:null
众所周知的是,java中除基本类型外,参数都是引用传递。 但是,有一个例外,就是当实参为null时,其实,它依然是一个值传递。 也就是说,传参为null,不管函数体内用这个参数做了什么,跳出函数体后该参数依然是null 或者说,引用传递退化成为了值传递。 再进一步分析,其实是基本类型和指向null的非基本类型的指针,都在栈而非堆中,而引用传递的是堆内存地址。 类似的还有String类型。
数组作为实参传给函数的形参指针
#include #include uint8_t Data[]={0x28,0x34,0x00,0x25,0x00,0x86,0x20,0x18}; void fun(uint8_t *pdata,uint8_t len)//pdata接收数组的首地址 {      uint8_t i,buf[8];      for(i = 0;i          buf[i
Java中的形参和实参的区别以及传值调用和传引用调用
名词解析: 1.形参:用来接收调用该方法时传递的参数。只有在被调用的时候才分配内存空间,一旦调用结束,就释放内存空间。因此仅仅在方法内有效。 2.实参:传递给被调用方法的值,预先创建并赋予确定值。 3.传值调用:传值调用中传递的参数为基本数据类型,参数视为形参。 4.传引用调用:传引用调用中,如果传递的参数是引用数据类型,参数视为实参。在调用的过程中,将实参的地址传递给了形参,形参上的改变
C语言中数组指针 作为形参
2015 0605 在修改程序的过程中,看到两种将数组作为形参的方法,于是搜了一下,找了一下比较全面地介绍数组指针的文章。 先写下我遇到的两种方式: 方式1: void filter_c(long double *,long double *,float *,int);//函数声明 filter_c(NAFF_b,NAFF_a,RealTimeSignal_filter,len_ne
参数传递---形参改变实参指针变量的值
实参是指针,想通过函数调用改变该指针,则形参需要定义成指向指针的指针。 就是通过找到该指针的地址,然后修改地址的内容(即指针)的方法来改变指针的指向,属于对地址的直接访问。 假如有函数 void deleteNode(listNode** L,int value);则L代表指针的地址,*L代表地址中的内容(实参中的指针),**L代表指针中的内容。 函数参数传递形参是通过拷贝副本的方式传递的,
简单明了的解释形参和实参的区别
       都到这个节骨眼上了,我虽然会用java进行编程,接触编程语言已经正好两年了,并且也做过几个对于学生来说很大的项目了,但是做面试题时突然整了这个面试题给我我却哑口无言,自己心里知道这问题非常基础,很是惭愧,java会用是会用,但是很多理论性的东西居然说不出个所以然来,今天百度了一下,发现非常好理解的一个百度提问者的答案:百度知道答案原文 ...
关于C语言中形参与实参在系统堆栈的变化过程
    在各种计算机编程语言中,都少不了函数调用来完成某些特定功能。我们要使用一个函数前,必定会先定义该函数(可能还会先声明它)。在这个过程中,我们大多会给这个函数传递某些‘参数’,当我们定义被调用函数时,函数名后的括号( )中即为我们传入的“形参”,函数可以在函数体中描述如何操作这些“形参”;同时,我们调用函数时,例如 fun(param1,param2,...),括号里面的这些param,我们...
实参数组名与形参数组名的尴尬
1.实参数组名代表一个固定的地址,或者说是指针型常量,因此要改变其值是不可能的。 例如:a++; //语法错误,a是常量,不能改变 2.形参数组名是指针变量,并不是一个固定的地址值,它的值是可以改变的。 例如: f(array[ ],int n) { cout array=array+3; cout } 要真正明白为何上述程序是正确的,那么要先明确:C++编译系统将形参数
实参和形参都是指针。。
#include #define N 10 int main() { void inv(int *x,int n); int i,a[10]={3,7,9,11,0,6,7,5,4,2},*p=a; printf("The original array:\n"); for(i=0;i printf("%4d",*p++); printf("\n"); p=a; inv(p,1
Java方法中引用类型的形参传递问题
众所周知,Java方法的形参如果是基本类型,是值传递,也就是说实参将数值传递给形参后,形参对值的操作跟实参变量毫无关系,举例: public static void change(int a, int b){ a = a + b; }int c = 1, d = 2; change(c , d); 这时输出c, 其值还是1。 假如是引用类型作为形参: public sta
形参改变实参的值不变(C语言基础知识加例题讲解)
#include <stdio.h> fun(int x,int y) { static int m=0,i=2;  i+=m+1;m=i+x+y;return m; } main() { int j=1,m=1,k;  k=fun(j,m);printf("%d,",k);  k=fun(j,m);printf("%d\n",k); } 执行后的输出结果是(  )。 5,115,511,
函数中的形参问题(指针形参、引用形参、二重指针作为形参)
(1)用指针传递参数,可以实现对实参进行改变的目的,是因为传递过来的是实参的地址,因此使用*a实际上是取存储实参的内存单元里的数据,即是对实参进行改变,因此可以达到目的。在使用的过程中需要通过对地址的解引用来操作其所指向的变量,同时可以通过指针的自增自减移动从而改变所指向的值,灵活度较大。 (2)引用作为函数参数进行传递时,实质上传递的是实参本身,即传递进来的不是实参的一个拷贝,因此对形
C/C++函数形参传实参时值传递、指针传递、引用传递的区别
值传递:形参是实参的副本(复制、拷贝),形参值的改变不会影响实参的值,这种方式是很常见的。 指针传递:形参是指针类型,形参作指针运算后指向的就是实参,所以会影响实参的值。这种方式也是很常见的。 引用传递:在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。这种方式我觉得是并不常见的,后来证实其实也常用。 下面对三种情况分别举例: 值传递的例子:  ...
链表头节点问题(指针作为参数传递不能为NULL)
真是脑残,以前没有注意过这个问题,今天恶心了我好一会。做个记录,以后不要再犯。  这样在main函数里面定义一个指针变量然后传进函数里面在申请空间的做法是错误的。 void creat(node* head) { if(head==NULL){ head=(node*)malloc(sizeof(node)); } node *p=(node*)malloc(sizeof(node...
C语言-实参到函数形参传递的理解
问题 在C语言函数参数设置过程中,有些时候总是不能达到预期的效果。书上总是对这个C语言参数传递描述:传值方式、传到调用函数的是副本,然后就是常规的swap函数说明这个问题,但是还是不能以swap描述所有的问题,看了这个例子总是给人一种感觉:考虑到要在函数内部改变数据,在调用函数里边也真正改变了数据就用指针,这个感觉还是有漏洞,需要完善一下这个规则。 C语言参数传递:传值方式 有传值方式,还有
实参和形参之间 传数值和传地址的差别
实参和形参之间传数值,和传地址的差别(考试的重点) 传数值的话,形参的变化不会改变实参的变化。 传地址的话,形参的变化就会有可能改变实参的变化。   传数值和传地址(每年必考好多题目)   void fun(int a,intb)                    void fun(int *a,int *b)            { int t ;     
指针用于将函数中形参的值传递给实参
void Get_Value_2(unsigned int*data0,unsigned int *data1) {          //buf中数据长度          unsignedshort buf_len = 0;          //buf数据中值的位数          unsignedshort buf_data_len = 0;          unsigne
关于空指针(指针指向为NULL)和void类型的指针的理解
正在学C,书上老说空指针,
Python中的实参和形参
def appendlist(list): list.append(5) print(list)list=[1,2,3,4] appendlist(list) print(list)def printname(name): name='liusen' print(name) name='liyanmeng' printname(name) print(name)def
C什么叫实参 形参 ?怎么用?区别?
C什么叫实参 形参 ?怎么用?区别?
java中形参,实参改变
Java的形参,实参改变   Java中形参如果为基本类型的话,传递的是值,所以不会改变的(因为在内存中它指向的数据的地址没改变,所以不会发生改变)改变的只是形参,实参不会改变   //基本类型     public classtest3 {     publicstaticvoidmain(String [] args)     {      int a = 1;  
空指针、NULL指针、零指针
1. 空指针、NULL指针、零指针 1.1什么是空指针常量 0、0L、'\0'、3 - 3、0 * 17 (它们都是“integer constant expression”)以及 (void*)0 (我觉得(void*)0应该算是一个空指针吧,更恰当一点)等都是空指针常量(注意 (char*) 0 不叫空指针常量,只是一个空指针值)。至于系统选取哪种形式作为空指针常量使用,则是实现相关的。一
Python的形参和实参
形参可以设置参数默认值,设置遵循从右至左原则 例如:fun(x=0,y=1),fun(x,y=1),但不可以是fun(x=1,y)   形参设置可以为数字字符串变量、元组和字典等任意类型数据,元组形参是在变量名前加*,字典形参是在变量名前加** 例如:fun(var),fun(*tuple),fun(*list),fun(**dict) 实参接受也可以是任意类型数据,当接收数据为元组列表...
C语言——通过调用函数改变形参指针 改变实参指针问题
1,按值传递,在调用函数的时候,将指向数据的指针实参传递到调用函数的形参中去 2,单向传递,形参中的指针子函数改变地址后不能传给主调函数,变量同样指向了我们希望处理的数据,然后对形参的指针变量指向的数据进行各种希望的处理,在调用函数运行完成后,各个形参指针变量进行了释放。子函数改变地址后不能传给主调函数。 注:红字为摘抄部分 下面是测试代码.c: #include #include
指针做形参,形参的传递详解
一、用二级指针作为函数参数,有两种典型情况: 1.需要传递一级指针的数组时: 例如标准C的main函数: int main(int argc, char*[] argv),数组最高维可以退化,char*[] argv等价于char** argv。这里argv代表命令行参数数组。 2.需要对传入的一级指针进行修改时: 例如: void alloc_new_char_array(int n
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 国外编程语言课程怎么上 产品经理平时是怎么学习的

相似问题

1
怎么物理存储上怎么解释这道题? 实参的null和形参的null是指向的同一个地址吗?
1
springboot拦截器怎么获取controller返回的数据集
2
java怎么将无返回值的方法中的局部变量调用出来?
2
ssm框架 将数据从数据库显示在jsp上报错
1
netty服务端怎么打印与其连接的客户端的id?
2
萌新想问问为什么会报错呢?怎么访问构造函数里的name和pass啊?
2
java怎么在另外一个类里面调用一个无返回值方法里面的局部变量呢?
0
复用channel 怎么接收不到服务端的回复啊?
2
关于java物理存储常量池问题?
3
物理存储上怎么解释??我已经晕了
4
同一个浏览器不同域名请求同一个接口什么是一样的
4
MySQL中有两张表在不同的连接,数据库中,怎么关联查询??还是说不能实现o(╥﹏╥)o
0
springboot集成apache.cxf实现wsdl webservice接口服务及客户端,使用maven打包是遇到乱码问题
1
RSA算法中的公钥和私钥可以保存在数据库里面吗?
9
启动tomcat,报错不知道怎么解决
0
IDE上springboot项目,yml配置文件图标显示不是绿叶子,什么问题?
2
一道java编程题,悬赏有大佬会做吗?
2
java编程题,悬赏有大佬会做吗?
2
mybatis模糊查询时遇见的问题,网上都说这么查,但是我运行起来是错的啊,求救
1
mybatis模糊查询时遇见的问题,网上都说这么查,但是我运行起来是错的啊,求救