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
分享到:
相关推荐
适合人群:适用于希望深入理解和掌握C/C++指针概念和用法的程序员和技术爱好者。 使用场景及目标:帮助初学者全面了解指针的工作原理,增强对内存管理的理解,提高实际编程技能,特别是在需要高效管理和操作内存的...
《GTAV竖中指鼠标指针美化包》就是为Windows用户量身打造的一款独特鼠标指针主题,它将游戏《侠盗猎车手5(Grand Theft Auto V, 简称GTAV)》中的经典动作——竖中指,巧妙地融入到日常的电脑操作中,为用户的交互...
《深入理解C指针》是一本专为C语言爱好者和开发者设计的专业图书,它全面而深入地探讨了C语言中的核心概念——指针。作者Richard Reese通过清晰的讲解和丰富的实例,帮助读者构建对C指针的深刻理解。这本书不仅适合...
### 堆和栈的区别及深入理解C语言指针的应用 #### 一、预备知识——程序的内存分配 在深入探讨“堆”和“栈”的区别之前,我们首先需要了解程序运行时内存的基本划分。一个由C/C++编译的程序在运行时,其占用的...
Java中并没有像C++那样的自由指针操作,而是引入了引用这一概念。引用类似于C++的指针,但更安全,不允许空指针解引用和指针算术。Java的引用指向一个已经分配在堆上的对象,一旦引用被赋值,就不能改变它所指向的...
然而,指针是C语言中非常重要的一个概念,它能指向内存中的任何数据。在处理字符串时,我们可以使用指针来操作字符串,这就是所谓的“字符串指针”。 1. **指针的概念** 指针是一个变量,它存储了另一个变量的地址...
### C中指针的一些特殊用法 #### 一、引言 C语言作为一种高效且功能强大的编程语言,广泛应用于系统编程、嵌入式开发等领域。其中,指针是C语言中一个非常重要的概念,它提供了对内存直接操作的能力。本文将深入...
西门子STL编程语言中的指针应用是PLC编程中的一个重要概念,尤其在处理大量数据和复杂逻辑时显得尤为重要。本文将详细讲解STL语言中的指针类型、寻址方式,并通过案例来帮助理解。 首先,我们来看寻址方式。在...
《C语言再再论指针修订版》这篇文章是作者对于2005年所作《再再论指针》的更新版本,旨在进一步深化读者对于C/C++中指针的理解。在修订版中,作者主要从以下几个方面进行了补充和完善: 1. **引用C/C++标准的条款...
在编程世界里,C 和 C++ 语言中的指针是一个至关重要的概念,它们为程序员提供了直接访问内存的能力,使得高效编程成为可能。本篇将详细阐述指针的相关知识点,包括其定义、用法、操作以及常见陷阱。 首先,我们要...
《传说中世上最赞的C指针文章》深入解析了C和C++中指针的各个方面,对于初学者理解指针的使用具有极大帮助。本文将详细阐述文章中提到的知识点,帮助读者全面掌握指针。 一、指针的概念 1. 指针的类型 指针类型的...
网上购物是学生非常熟悉的场景,将这一实际生活中的例子引入到指针教学中,有助于学生理解和掌握抽象的指针概念。 为了更清晰地说明如何通过教学方法让学生理解指针,文章详细介绍了引入指针的原因。通过三个示例...
标题《c指针宝典(大师版)》和描述“指针——C语言中的精华。只有掌握了指针,你才能说你学会了C语言。”表明本文将深入探讨C语言指针的各个方面,指针是C语言的核心概念之一,它的理解和运用是衡量一个C语言程序员...
在Keil C编程环境中,指针与存储区的关系是编程时需要特别关注的一个重要概念,尤其是在嵌入式系统开发中。Keil C提供了多种存储类型,用于指定变量存储的位置,这直接影响到指针的使用和程序的执行效率。 首先,...
在DEVC++中编写涉及指针的程序时,理解这些基本概念和操作至关重要。熟练掌握指针可以让你编写出更高效、更灵活的代码。记得在实际编程中实践这些知识点,并结合DEVC++的调试功能,以便更好地理解和解决问题。
在VC++(Visual C++)编程环境中,指针函数是一种非常重要的概念,它结合了C++中的两种基本特性:指针和函数。指针变量可以存储内存地址,而指针函数则是返回指针或者在函数内部使用指针的函数。在实际编程中,这种...
带这个问题与本中心庄鹏飞老师讨论之后,发现原来我没有搞清楚在C++中指针分为栈指针和堆指针。参见int* Test::getArray()方法中关于数组的声明以及本人非常详细的说明,那么我想会给学习C++编程的人员带来收获。 ...
在C++中,指向函数的指针是一种强大的工具,它允许我们存储函数的地址并以指针的形式调用它们。这种技术在某些情况下非常有用,比如动态选择执行哪个函数、作为参数传递给其他函数或者作为函数的返回值。下面我们将...
在C++编程语言中,指针和引用是两种非常重要的概念,它们都用来间接访问内存中的对象,但各自有着独特的特性和用途。了解并熟练掌握它们的区别对于编写高效、安全的代码至关重要。 首先,让我们来看指针。指针是C++...