#includeusing namespace std; //24 04 指针和函数.cpp void valuePass(int, int); void addressPass(int*, int*); void main() { int a = 10; int a2[] = { 1,2,3,4,5,6,7,8,9,0 }; //指针保存地址,地址指向数据 //1、定义一个指针:数据类型 * 指针变量名 int* p; //指针记录变量a的地址: p = &a; cout << "a 的地址为:" << &a << endl; cout << "指针 p 为:" << p << endl; //2、使用指针: //通过解引用(*)的方式来找到指针指向的内存(中的数据) *p = 1000; cout << "a = " << a << endl; cout << "*p = " << *p << endl; //3、指针所占据的内存空间:(32位系统下都为4字节)都为8字节 cout << "sizeof(int *) = " << sizeof(int*) << endl; cout << "sizeof(float *) = " << sizeof(float*) << endl; cout << "sizeof(double *) = " << sizeof(double*) << endl; cout << "sizeof(char *) = " << sizeof(char*) << endl; //4、空指针 //指针变量指向内存中编号为0的空间 //空指针指向的内存是不可以访问的,0~255为系统占用内存,不允许用户访问,无权限 //p = NULL; error //5、野指针 //指针变量指向非法的内存空间,读取访问权限冲突 //p = (int*)0x1100; error //6、常量指针:const int* //指针的指向可以修改,但是指针指向的值不可以进行修改 const int* p1 = &a; //*p1 = 20; error p1 = &a; //7、指针常量:int * const //指针的指向不可以修改,但是指针指向的值可以进行修改 int* const p2 = &a; *p2 = 20; //p2 = &a; error //8、既修饰指针又修饰常量:const int * const //指针的指向不可以修改,指针指向的值也不可以进行修改 const int* const p3 = &a; //*p3 = 20; error //p2 = &a; error //9、指针和数组:利用指针访问数组中的元素 int* p4 = a2; cout << "第一个元素:" << a2[0] << endl; cout << "指针访问的第一个元素:" << *p4 << endl; p4 += 2; cout << "指针访问的第三个元素:" << *p4 << endl; cout << "指针遍历所有元素:" << endl; p4 = a2; for (int i = 0; i < 10; i++) { cout << *p4 << endl; p4++; } //10、指针和函数 //值传递,不会改变实参 int a2_1 = 12, b2_1 = 1; valuePass(a2_1, b2_1); cout << a2_1 << "-------" << b2_1 << endl; //地址传递,会改变实参 addressPass(&a2_1, &b2_1); cout << a2_1 << "-------" << b2_1 << endl; system("pause"); }



