`

结合C中指针概念理解“java中没有指针”这句话

阅读更多

Java中没有指针的概念,并不是指针在Java中不存在,而是指针这个概念在Java中不存在,或者说Java中的指针的没有C中那样全面和强大。

Java定义类类型的变量:A a=new A();让a作为参数传递的时候,传递的同样是值,只不过这里的值不再是int作为参数时复制的一份值,而是可以创建的这个元素的一个地址的复制。这种表现同C中的指针传递其实是相同的。

C中int、char等基本数据类型,传递的是复制后的值,所以在函数中没法改变实参。C中如果用数组(int a[])作为形参,传递的是实参数组数组首元素地址的复制值。


可是Java中“指针”没有C中强大,下面介绍一些Java、C中指针的不同点,和C中指针使用的注意点:

(如果不做特殊说明,下面的a表示变量名,p表示指针名)

 

1、在C中甚至可以给函数创建指针,于是函数也可以作为另一个函数的参数。当然,诸如指针的指针等概念,都说明了C中指针的强大。

2、虽然Java中类类型的变量名称类似于指针,可是它远没有C中的指针灵活:C中int等基本数据类型都同样存在指针,C中的指针作为存储地址的一块内存,可以动态的自增自减,这就赋予其足够的灵活性。

3、可以用C中的指针来提高程序的执行效率。如在循环遍历数组中元素的时候用a[i]或者*(a+i)(这两种方法其实在C编译器里被看成是等效的),没有使用p++结合*p来的高效。

3、'*'这个符号在C中,定义指针的时候(如int *p)它是作为一种标志,而在单独使用的时候(如*p)它作为一种求值运算符号(它保证在C源程序编译阶段能通过p中存储地址将找到内容)。所以,在定义指针时直接复制必须赋给它地址(如

int a=10;int *p=&a;),而不在定义时赋值,应该这样写(int a=10;int *p;p=&a;)。

4、为便于理解,*可以看成一种运算符号(我暂时还没有搞清楚这个符号在C语言的哪个阶段被解释)。而[]等价于做变质址元素后再求值,即a[1]等价于*(a+1)。

5、a表示直接访问,*p表示间接访问。直接访问,传递的时候拷贝的是值,间接访问如果不加*,传递的将是地址。


另外,在学习C中的指针还要注意各种式子的等价关系:

1、*p等价于变量名,因为他们在编译阶段都映射到&a(p等同于&a)(这点是我猜测的,不误导大家)

2、函数中的形参使用int a[]和使用int *p是一个效果

3、对数组int a[10];  p=&a[0];等价于p=a;(a是常量,存储数组的首地址)

4、int *p=&a[0];等效于int *p;p=&a[0];

5、引用一维数组元素的时候,下标法a[i]/p[i]等效于指针法*(a+i)/*(p+i)

6、二维数组中,a[0]/*(a+0)/*a/a+0/&a[0]都表示同一个地址。

a[1]+2/&a[1][2]/*(a+1)+2也都表示同一地址。

如果要表示值,必须要*/[]出现两次,按我自己的说法,得执行两次求值运算。

7、其他的等效式子……

 

p:这篇纯属个人笔记,错误还很多。

 

  • 大小: 6.7 KB
分享到:
评论
1 楼 freewxy 2011-03-02  

相关推荐

    C/C++ 中指针的概念、操作及其应用详解

    适合人群:适用于希望深入理解和掌握C/C++指针概念和用法的程序员和技术爱好者。 使用场景及目标:帮助初学者全面了解指针的工作原理,增强对内存管理的理解,提高实际编程技能,特别是在需要高效管理和操作内存的...

    GTAV竖中指鼠标指针美化包(win)

    《GTAV竖中指鼠标指针美化包》就是为Windows用户量身打造的一款独特鼠标指针主题,它将游戏《侠盗猎车手5(Grand Theft Auto V, 简称GTAV)》中的经典动作——竖中指,巧妙地融入到日常的电脑操作中,为用户的交互...

    深入理解C指针 (超清晰,完整目录)

    《深入理解C指针》是一本专为C语言爱好者和开发者设计的专业图书,它全面而深入地探讨了C语言中的核心概念——指针。作者Richard Reese通过清晰的讲解和丰富的实例,帮助读者构建对C指针的深刻理解。这本书不仅适合...

    堆和栈的区别 深入理解c语言指针的奥秘 C 中指针的复杂应用

    ### 堆和栈的区别及深入理解C语言指针的应用 #### 一、预备知识——程序的内存分配 在深入探讨“堆”和“栈”的区别之前,我们首先需要了解程序运行时内存的基本划分。一个由C/C++编译的程序在运行时,其占用的...

    Java中的指针与引用初探.pdf

    Java中并没有像C++那样的自由指针操作,而是引入了引用这一概念。引用类似于C++的指针,但更安全,不允许空指针解引用和指针算术。Java的引用指向一个已经分配在堆上的对象,一旦引用被赋值,就不能改变它所指向的...

    C语言字符串指针(指向字符串的指针)_C语言中文网1

    然而,指针是C语言中非常重要的一个概念,它能指向内存中的任何数据。在处理字符串时,我们可以使用指针来操作字符串,这就是所谓的“字符串指针”。 1. **指针的概念** 指针是一个变量,它存储了另一个变量的地址...

    c中指针的一些特殊用法

    ### C中指针的一些特殊用法 #### 一、引言 C语言作为一种高效且功能强大的编程语言,广泛应用于系统编程、嵌入式开发等领域。其中,指针是C语言中一个非常重要的概念,它提供了对内存直接操作的能力。本文将深入...

    西门子STL指针介绍+案例说明

    西门子STL编程语言中的指针应用是PLC编程中的一个重要概念,尤其在处理大量数据和复杂逻辑时显得尤为重要。本文将详细讲解STL语言中的指针类型、寻址方式,并通过案例来帮助理解。 首先,我们来看寻址方式。在...

    C语言再再论指针修订版

    《C语言再再论指针修订版》这篇文章是作者对于2005年所作《再再论指针》的更新版本,旨在进一步深化读者对于C/C++中指针的理解。在修订版中,作者主要从以下几个方面进行了补充和完善: 1. **引用C/C++标准的条款...

    C,C++中指针问题详解

    在编程世界里,C 和 C++ 语言中的指针是一个至关重要的概念,它们为程序员提供了直接访问内存的能力,使得高效编程成为可能。本篇将详细阐述指针的相关知识点,包括其定义、用法、操作以及常见陷阱。 首先,我们要...

    传说中世上最赞的C指针文章

    《传说中世上最赞的C指针文章》深入解析了C和C++中指针的各个方面,对于初学者理解指针的使用具有极大帮助。本文将详细阐述文章中提到的知识点,帮助读者全面掌握指针。 一、指针的概念 1. 指针的类型 指针类型的...

    C语言程序设计中指针教学方法的研究.pdf

    网上购物是学生非常熟悉的场景,将这一实际生活中的例子引入到指针教学中,有助于学生理解和掌握抽象的指针概念。 为了更清晰地说明如何通过教学方法让学生理解指针,文章详细介绍了引入指针的原因。通过三个示例...

    c指针宝典(大师版)

    标题《c指针宝典(大师版)》和描述“指针——C语言中的精华。只有掌握了指针,你才能说你学会了C语言。”表明本文将深入探讨C语言指针的各个方面,指针是C语言的核心概念之一,它的理解和运用是衡量一个C语言程序员...

    Keil C中指针与存储区间的关系与特点

    在Keil C编程环境中,指针与存储区的关系是编程时需要特别关注的一个重要概念,尤其是在嵌入式系统开发中。Keil C提供了多种存储类型,用于指定变量存储的位置,这直接影响到指针的使用和程序的执行效率。 首先,...

    DEVC++中指针所有集合

    在DEVC++中编写涉及指针的程序时,理解这些基本概念和操作至关重要。熟练掌握指针可以让你编写出更高效、更灵活的代码。记得在实际编程中实践这些知识点,并结合DEVC++的调试功能,以便更好地理解和解决问题。

    VC中指针函数的定义和案例共2页.pdf.zip

    在VC++(Visual C++)编程环境中,指针函数是一种非常重要的概念,它结合了C++中的两种基本特性:指针和函数。指针变量可以存储内存地址,而指针函数则是返回指针或者在函数内部使用指针的函数。在实际编程中,这种...

    关于C++中栈指针和堆指针的使用说明

    带这个问题与本中心庄鹏飞老师讨论之后,发现原来我没有搞清楚在C++中指针分为栈指针和堆指针。参见int* Test::getArray()方法中关于数组的声明以及本人非常详细的说明,那么我想会给学习C++编程的人员带来收获。 ...

    c++中指向函数的指针

    在C++中,指向函数的指针是一种强大的工具,它允许我们存储函数的地址并以指针的形式调用它们。这种技术在某些情况下非常有用,比如动态选择执行哪个函数、作为参数传递给其他函数或者作为函数的返回值。下面我们将...

    C++中指针和引用的区别

    在C++编程语言中,指针和引用是两种非常重要的概念,它们都用来间接访问内存中的对象,但各自有着独特的特性和用途。了解并熟练掌握它们的区别对于编写高效、安全的代码至关重要。 首先,让我们来看指针。指针是C++...

Global site tag (gtag.js) - Google Analytics