c语言的符号和引用问题数据结构C语言 ->含义是
2012-07-28 18:11
495 查看
c 语言中有两个符号,一个是*,一个是&,有时写一个函数时如qq(int *q);
有时确是qq(int &q),有时是qq(int q);他们用的场合还不一样,希望大家能详细解释
赞同
1
| 评论
有时确是qq(int &q),有时是qq(int q);他们用的场合还不一样,希望大家能详细解释
qq(int* q)中的(int* q)是qq这个函数的形参表,int* q表示的是q是一个指向int对象(或数据类型)的指针,即该函数接受一个int型指针为参数; 至于qq(int& q),这个貌似只有在C++中才见得到吧,该句的意思是函数qq接受一个int类型的引用(引用只有在C++等语言中才有)q。 而qq(int q),表示的是qq这个函数接受一个整形的数据q。 默认情况下,C/C++是按值传递(对于C则是任何时候都是按值传递),也就是说当你调用一个接受参数的函数的时候,该函数的形参是原参数的一份拷贝,举例: void qq(int a) // 形参是a局部变量 { a++; // 只改变形参,不会影响b }// a在此时被自动销毁 int main() { int b = 1; qq(b); printf("%d", b); // 打印出1 } 可以看出在传值给函数qq的时候,a仅仅作为b的一份拷贝,他们所驻扎的存储空间是不一样的,所以改变a不会影响b。 当然在C中传指针时也是按值传递, void qq(int* a) { *a = 1989; // a存储着b的地址,*a用于获得驻扎在该地址的b的值 } // 指针a在此时也被自动销毁, int main() { int b = 1; qq(&b); // 按值传递,传递的是b的地址 printf("%d", b); // 打印出1989 } 这一次qq的形参a是一个指针,所以接受的是b的地址的拷贝(地址是一个长整形数据)而不是b的拷贝,当在函数qq中使用*a = 1989时,*a把b的地址所存储的值改变为1989,所以外部世界的b的值(这里指的是main中的b,外部是相对于函数qq而言)也随之改变。 而对于函数qq(int& a),这是C++中引入的一个新类型:引用,所带来的新的函数传值方式,即按引用传值。举例: void qq(int& a) // a可以看作是b的别名,a其实和b拥有相同的内存地址 { a = 1989; } // a被销毁了吗? int main() { int b = 1; qq(b); // 看起来像按值传递 printf("%d", b); // 结果和上面的一样,也是1989 } 引用的意义是指代原对象本身,也可以理解为别名,比如某人被别人起了多个外号,小a,大q,傻x,而他本人可能叫w,但不管是小a,大q,傻x还是w,其他人都知道他们是同一个人。因此对传入qq的参数a可以理解为main中b的别名,即等价于main中的b,所以任何对a的操作其实就是对b的操作,因此main中b的值最后也发生了改变。 简单地加以概括,其实函数传值就那么2种类型: 1、改变实参的值。 如传指针或引用时改变他们所引用对象的值。 2、不改变实参的值。 一般的按值传递。 ”。->操作符用于指针变量(在C中,一般是指向struct变量的指针),表示引用该指针所指的对象的成员。在此例中,p->size的含义就是引用指针p所指向的地址处的对象的size成员,跟(*p).size的含义是相同的。
赞同
1
| 评论
p是指向结构题的指针变量 设p=&a p->size表示指针变量p指向的结构体变量a的成员变量size 与下面的等价 a.size 即"->"为指向结构体成员的运算符
相关文章推荐
- C语言描述的数据结构顺序表的置空 slt->size=0含义
- 关于c语言写数据结构时类型替换的问题
- 数据结构 括号匹配问题 (栈 C语言)
- C语言笔记->通过指针引用数组
- 【C语言训练】排序问题<1>
- c++ 函数符号重载 返回类型是否为引用问题 剖析
- 数据结构C语言>3基本链表>3-9具有头结点的链表
- C语言数据结构----栈的应用(程序的符号匹配检测)
- html <a>、<css>、<script>中src引用文件的路径问题
- C语言里面,这个符号(->)
- error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er
- <转>关于 error LNK2019:无法解析的外部符号 ,该符号在函数**中被引用的思考
- >>>是否缺少 using 指令或程序集引用?-关于Asp.Net中引用类的问题。
- Android:安卓资源引用符号的含义
- <target>标签和web程序引用问题
- 【C语言训练】排序问题<2>
- 【C语言】关于宏定义中#和##符号的使用和宏定义展开问题
- C语言中如何判断多判断多个符号相连问题
- <C/C++>C语言字节对齐问题总结
- error LNK2019: 无法解析的外部符号 ___glutInitWithExit@12,该符号在函数 _glutInit_ATEXIT_HACK@8 中被引用 1>GEARS.obj : er