C++指针学习5

C++指针学习五
C++指针学习笔记五
地址操作符/去引操作符(&)
存储其它变量地址的变量,称之为指针。
使用指针的时候,我们可以通过在指针标识的前面加星号asterisk (*)来存储该指针指向的变量所存储的数值,它可以被翻译为“所指向的数值”("value pointed by")。
“&”被用作一个变量的前缀,可以被翻译为“……的地址“。
”*“表示要取的是表达式所表示的地址指向的内容,可以被翻译为”……指向的数值“。
"例子:
andy = 25;
ted = &andy;
结果是下面的等式全部成立
andy == 25
&andy == 1776
ted == 1776
*ted == 25
"
声明指针变量
"声明指针的格式:
type * pointer_name;
type是指针所指向的数据的类型,而不是指针自己的类型。*仅表示声明的是指针,不要和上面的引用操作混淆。"
"例子:
andy = 25;
ted = &andy;
结果是下面的等式全部成立
andy == 25
&andy == 1776
ted == 1776
*ted == 25
"
"例子:
#include <iostream.h>
int main () {
int value1 = 5, value2 = 15;
int * mypointer;
mypointer = &value1;
*mypointer = 10;
mypointer = &value2;
*mypointer = 20;
cout << ""value1=="" << value1 << ""/value2=="" << value2;
return 0;
}
输出结果:value1==10 / value2==20"
"// more pointers
#include <iostream.h>

int main () {
int value1 = 5, value2 = 15;
int *p1, *p2;
p1 = &value1; // p1 = address of value1
p2 = &value2; // p2 = address of value2
*p1 = 10; // value pointed by p1 = 10
*p2 = *p1; // value pointed by p2 = value pointed by p1
p1 = p2; // p1 = p2 (value of pointer copied)
*p1 = 20; // value pointed by p1 = 20
cout << ""value1=="" << value1 << ""/ value2=="" << value2;
return 0;
}
输出结果:value1==10 / value2==20"
指针和数组
"例子:
#include <iostream.h>
int main () {
int numbers[5];
int * p;
p = numbers;
*p = 10;
p++;
*p = 20;
p = &numbers[2];
*p = 30;
p = numbers + 3;
*p = 40;
*(p + 4) = 50;
for (int n = 0; n < 5; n++)
cout << numbers[n] << "","";
returns 0;
}
输出结果:10, 20, 30, 40, 50,"
指针初始化
"例子:
int number;
int *tommy = &number;"
"例子:
char * terry = ""hello"";
指针terry 指向一个字符串,可以被当作数组一样使用(数组只是一个常量指针)。
terry[4] 与*(terry+4)是一样的"
指针的数学运算
对指针只有加法和减法运算
递增 (++) 和递减 (--) 操作符比引用操作符reference operator (*)有更高的优先级
指针的指针
"C++ 允许使用指向指针的指针。要做到这一点,我们只需要在每一层引用之前加星号(*)
例如:
char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;"
"空指针
指针void 是一种特殊类型的指针。void 指针可以指向任意类型的数据,可以是整数,浮点数甚至字符串。唯一个限制是被指向的数值不可以被直接引用(不可以对它们使用引用星号*),因为它的长度是不定的,因此,必须使用类型转换操作或赋值操作来把void 指针指向一个具体的数据类型。"
"例子:
#include <iostream.h>
void increase (void * data, int type) {
switch (type) {
case sizeof(char) : (*((char*)data))++; break;
case sizeof(short) : (*((short*)data))++; break;
case sizeof(long) : (*long((long*)data))++; break;
}
}

int main () {
char a = 5;
short b = 9;
long c = 12;
increase (&a, sizeof(a));
increase (&b, sizeof(b));
increase (&c, sizeof(c));
cout << (int) a << "","" << b << "","" << c;
return 0;
}
输出结果:6, 10, 13"
函数指针
C++ 允许对指向函数的指针进行操作。它最大的作用是把一个函数作为参数传递给另外一个函数。
"例子:
#include <iostream.h>
int addition (int a, int b) {
return (a + b);
}
int subtraction (int a, int b) {
return (a + b);
}
int (*minus) (int , int) = subtraction;
int opertion (int x, int y, int (*functioncall)(int, int) {
int g;
g = (*functioncall) (x, y);
return (g);
}
int main () {
int m, n;
m = opertion (7, 5, addition);
n = opertion (20, m, minus);
cout << n;
return 0;
}
输出结果:8"