C 指针和引用,c语言指针引用

1 , c语言指针引用*(a+2) *(a+2)*(&a[0]+2)*(&a[2])
2,C语言中引用及指针和引用的联系与区别C语言中引用和指针的用法很相似,在做函数参数时都是传递变量的地址 , 而不是传递一个变量的副本 , 都可以返回对参数变量的修改 。主要区别在于参数的传递形式上 。指针的形式类似于 :int *pInt;引用的形式类似于 :int &pInt;
3 , C中指针和引用有什么区别指针与引用看上去完全不同(指针用操作符“*”和“->”,引用使用操作符“. ”) , 但是它们似乎有相同的功能 。指针与引用都是让你间接引用其他对象 。你如何决定在什么时候使用指针 , 在什么时候使用引用呢?首先,要认识到在任何情况下都不能使用指向空值的引用 。一个引用必须总是指向某些对象 。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针 , 因为这样你可以赋空值给该变量 。相反 , 如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用 。“但是,请等一下” , 你怀疑地问,“这样的代码会产生什么样的后果?”char *pc = 0; // 设置指针为空值char& rc = *pc; // 让引用指向空值这是非常有害的,毫无疑问 。结果将是不确定的(编译器能产生一些输出,导致任何事情都有可能发生) 。应该躲开写出这样代码的人,除非他们同意改正错误 。如果你担心这样的代码会出现在你的软件里 , 那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做 。我们以后将忽略一个引用指向空值的可能性 。因为引用肯定会指向一个对象,在C++里,引用应被初始化 。string& rs; // 错误 , 引用必须被初始化string s("xyzzy");string& rs = s; // 正确,rs指向s指针没有这样的限制 。string *ps; // 未初始化的指针// 合法但危险不存在指向空值的引用这个事实意味着使用引用的代码效率比使用指针的要高 。因为在使用引用之前不需要测试它的合法性 。void printDouble(const double& rd)cout << rd; // 不需要测试rd,它} // 肯定指向一个double值相反,指针则应该总是被测试 , 防止其为空:void printDouble(const double *pd)if (pd)cout << *pd;}}指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象 。但是引用则总是指向在初始化时被指定的对象,以后不能改变 。string s1("Nancy");string s2("Clancy");string& rs = s1; // rs 引用 s1string *ps = &s1; // ps 指向 s1rs = s2; // rs 仍旧引用s1,// 但是 s1的值现在是// "Clancy"ps = &s2; // ps 现在指向 s2;// s1 没有改变总的来说,在以下情况下你应该使用指针 , 一是你考虑到存在不指向任何对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向) 。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用 。还有一种情况,就是当你重载某个操作符时 , 你应该使用引用 。最普通的例子是操作符[] 。这个操作符典型的用法是返回一个目标对象,其能被赋值 。vector<int> v(10); // 建立整形向量(vector),大小为10;// 向量是一个在标准C库中的一个模板(见条款M35)v[5] = 10; // 这个被赋值的目标对象就是操作符[]返回的值如果操作符[]返回一个指针,那么后一个语句就得这样写:*v[5] = 10;但是这样会使得v看上去象是一个向量指针 。因此你会选择让操作符返回一个引用 。(这有一个有趣的例外,参见条款M30)当你知道你必须指向一个对象并且不想改变其指向时,或者在重载操作符并为防止不必要的语义误解时,你不应该使用指针 。而在除此之外的其他情况下,则应使用指针 。【C 指针和引用,c语言指针引用】
4,Java引用和C指针的区别1.类型:引用其值为地址的数据元素,java封装了的地址,可以转成字符串查看,长度可以不必关心 。C++指针是一个装地址的变量,长度一般是计算机字长,可以认为是个int 。2.所占内存: 引用声明时没有实体,不占空间 。C++指针如果声明后会用到才会赋值 , 如果用不到不会分配内存 。3.类型转换:引用的类型转换,也可能不成功 , 抛异 , 或者IDE就不能通过 。C++指针只是个内存地址,指向那里,对程序来说还都是一个地址,但可能所指的地址不是程序想要的!4.初始值:引用初始值为java关键字null 。C++指针是INT,如不初始化指针,那他的值就不是固定的了 。5.计算:引用是不可以计算的 。C++指针是INT,所以他可以计算,所以经常用指针来代替数组下标 。6.控制:引用不可以计算,所以他只能在自己程序里 , 可以被控制 。C++指针是内存地址,也可以计算,所以他有可能指向了一个不归自己程序使用的内存地址,对于其他程序来说是很危险的,对自己程序来说也是不容易被控制的 。7.内存泄露:JAVA引用不会产生内存泄露 。C++指针是容易产生内存泄露的 , 所以程序员要小心使用,及时回收 。8.作为参数:JAVA的方法参数只是传值,引用做为参数使用时候,回给函数内引用的值的COPY , 所以在函数内交换两个引用参数是没意义的 , 因为函数只交换的参数的COPY值,但在函数内改变一个引用参数的属性是有意义的 , 因为引用参数的COPY所引用的对象是和引用参数是同一个对象 。C++指针做为参数给函数使用,实际上就是他所指的地址在被函数操作,所以函数内用指针参数的操作都将直接作用到指针所指向的地址(变量,对象,函数,等等) 。9.操作符和声明:java里用"." 。C++指针用"->" 用"*"声明指针 。(似乎这条没什么用?。 ?0.本质:java中的引用和C++中的指针本质上都是想通过一个叫做引用或者指针的东西 , 找到要操作的目标(变量 对象等),方便在程序里操作 。所不同的是JAVA的办法更安全,方便些,但没有了C++的灵活 , 高效 。java中的引用和C++中的指针,他们最好不要混在一起,也不要认为是一回事,只不过他们的作用有些相似,总叫人不自觉的对比 。但在我们写JAVA程序的时候最好忘记C++的指针,写C++程序的时候 , 也不要老惦记着JAVA的引用 。只要记得引用无大?。?安全,不可计算 , 强转时要小心就好了 。参考http://blog.csdn.net/b271737818/article/details/3931913c++也有引用啊 和java的一样指针的特别之处在于指针可以直接对内存进行操作 新定义的指针如果没有给它手动指向一块内存的话(就是给指针赋值)指针就可能指向任意内存 如果你修改这个指针指向的值的话 可能造成包括系统崩溃在内各种意想不到的情况. 所以指针在安全性上有一定问题(不过用好指针的话真的很方便)引用是完全安全的 你怎么用也不可能造成指针上面那样的后果java由于上边说的原因吧指针给隐藏了 不能由程序员自己调用 但是实际上java还是有指针的...比如那个很常见的 空指针异常.JAVA的引用和C++的引用,二者本质上是不同的,c++中一个引用指向的地址不会改变,改变的是指向地址的内容,然而java中引用指向的地址在变 。如果非要对比着看 , 那么Java中的“引用”倒是和C/C++的指针更像一些,和C++的“引用”很不一样 。C++的“引用”是从一而终的 , 而Java的“引用”可以改变被引用的对象 。这些内容在java教程里都可以读到,我学过c++,java,现在从事as3开发,对这三门语言都区别过,望楼主采纳个人感觉java引用使用上和c++的指针差不多 。java引用可以为null,指针也可以 。java引用和c++的指针一般都要new一个对象才能用 。不过语法上又像c++的引用,可以直接用成员访问符,仅此而已 。其实c++的指针和引用本身区别也没有多少 , 引用这个概念就是从c语言,指针扩展来的 。

    推荐阅读