LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: shangxd

大家是否可以讨论一下指针的指针?

[复制链接]
发表于 2003-7-29 21:16:48 | 显示全部楼层
最初由 EvilSeed 发表
libinary:
理解了你的说法,但是如果按照你的说法来做的话那么在一个语句里面定义两个指针是不是这样呢:int* pt1,pt2;这样对么,好像不对吧。请指点一下。


建议去看一下 Think in c++ ,里面讲的很明白。

关于指针的定义:
int* ip;

可以这样理解:
开始先指定类型名(type name),这里是 int ,然后不是急于给出 identifier (这里是 ip) ,这时你告诉编译器:" Wait,it's a pointer",在 type 和 indentifer 插入一个 * 号.这样编译器就能够知道你定义的是一个指针.

int* pt1, pt2;
这样定义是错误的,相当于:
int* pt1;
int pt2;

正确的方法应该是每行定义一个指针:
int* pt1;
int* pt2;

首先指针也是变量,特别之处在于它所保存的是其他变量的地址.
举例说明:

  1. // About pointer
  2. #include <iostream>
  3. using namespace std;

  4. int main() {
  5.     int x = 47;
  6.     cout << "x = " << x << endl;     // x 的值
  7.     cout << "&x = " << &x << endl;   // x 的地址
  8.     int* p = &x;                     // 定义指针 p,并初始化
  9.     cout << "p = " << p << endl;     // p 的值
  10.     cout << "*p = " << *p << endl;   // 解引用 p
  11.     cout << "&p = " << &p << endl;   // 指针 p 的地址
  12. }
复制代码


屏幕输出:
x = 47
&x = 0x22ff6c
p = 0x22ff6c
*p = 47
&p = 0x22ff68



发表于 2003-7-30 04:49:50 | 显示全部楼层
这里是有点怪,因为int *是复合类型,所以*必须和变量名写在一起,比如:
int a[10], b[10];
不能写成: int [10] a, b;
但是a和b的类型是int [10],int [10]也是复合类型,
类型声明的时候把基本类型和类型修饰符写在前面,复合类型的部分和变量名写在一起,如:
unsigned int (*f)(int), (*g)(char, int);
总之语法就是这个样子。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表