指针间接访问操作的例子 int *p; 执行操作:“×=1;”前,(假设120和 124分别代表变量x和p的内存地址》 int x; X p X=1; 120: ? 124: ? p= &xi 执行操作:“X=1;”后: *p=2; X p 120: 1 124: 执行操作:一“p=&x;一”后: X p 120: 1 124:120 执行操作:“*p=2;”后, X 120: 2 124: 120
指针间接访问操作的例子 ◼ 执行操作:“x = 1; ”前,(假设120和 124分别代表变量x和p的内存地址) x p 120: ? 124: ? ◼ 执行操作:“x = 1; ”后: x p 120: 1 124: ? ◼ 执行操作:“p = &x; ”后: x p 120: 1 124: 120 ◼ 执行操作:“*p = 2; ”后, x p 120: 2 124: 120 int *p; int x; x = 1; p = &x; *p = 2;
对于一个指向结构类型数据的指针变量,通过它 来访问相应结构数据的成员时,可以写成: (*<指针变量>).<结构成员> 或 <指针变量>-><结构成员> 例如: struct A int i; double d; char ch; : Aa; A *p=&a; cout<<(*p).i<<p->d<<endl;/输出a.i和a.d
◼ 对于一个指向结构类型数据的指针变量,通过它 来访问相应结构数据的成员时,可以写成: (*<指针变量>).<结构成员> 或 <指针变量>-><结构成员> 例如: struct A { int i; double d; char ch; }; A a; A *p=&a; ...... cout << (*p).i << p->d << endl; //输出a.i和a.d
·请注意下面的问题: 。int*p; 。*p=1;/1赋值到哪里去了?
◼ 请注意下面的问题: • int *p; • *p = 1; //1赋值到哪里去了?
指针的运算 ·一个指针加上或减去一个整型值 实际加(或减) 的值由该指针所指向的数据类型来定。例如: int x; int *p; p=&x+2;/p的值为x的地址加上sizeof(int)*2后得到的地址 该操作通常用于以指针方式来访问数组元素。例如: int a[10]; int *p; p=&a[O];/或“p=a;”,a将被隐式转换成第一个元素的地址! 这时,访问数组a的元素可采用下面的形式: ▣a[0]、a[1]、、a[9] *p、*(p+1)、…、*(p+9) p[O]、p[1]、p[9]
◼ 一个指针加上或减去一个整型值 • 实际加(或减)的值由该指针所指向的数据类型来定。例如: int x; int *p; p = &x + 2; //p的值为x的地址加上sizeof(int)*2后得到的地址 • 该操作通常用于以指针方式来访问数组元素。例如: int a[10]; int *p; p = &a[0]; //或 “p = a;”,a将被隐式转换成第一个元素的地址! 这时,访问数组a的元素可采用下面的形式: ◼ a[0]、a[1]、...、a[9] ◼ *p、 *(p+1)、...、 *(p+9) ◼ p[0]、p[1]、...、p[9] 指针的运算
int a[10]; int sum=0; 11111 for (int i=0;i<10;i++) sum +a[i]; 或者 int *p=&a[0]; for (int i=0;i<10;i++) sum+=*(p+i)月 或者 int *p=&a[0]; for (int i=0;i<10;i++) sum +p[i];
int a[10]; int sum=0; ...... for (int i=0; i<10; i++) sum += a[i]; 或者 int *p=&a[0]; for (int i=0; i<10; i++) sum += *(p+i); 或者 int *p=&a[0]; for (int i=0; i<10; i++) sum += p[i];