1.为什么要使用指针?
1)函数的值传递,无法通过调用函数,来修改函数的实参;
2)被调用函数需要提供更多的“返回值”给调用函数;
3)减少值传递时带来的额外开销,提高代码执行效率。
2.指针的初始化
1)32 位系统中,int 整数占 4 个字节,指针同样占 4 个字节
2)64 位系统中,int 整数占 4 个字节,指针同样占 8 个字节
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int main() {
int room = 2;
//定义两个指针变量指向room
int* p1 = &room;
int* p2 = &room;
printf("room地址:0x%p\n",&room);
printf("p1地址:0x%p\n",&p1);
printf("p2地址:0x%p\n", &p2);
printf("room所占字节:%d\n",sizeof(room));
printf("p1所占字节:%d\n", sizeof(p1));
printf("p2所占字节:%d\n", sizeof(p2));
system("pause");
return 0;
}
3.访问指针
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
int main() {
int room = 2;
int room1 = 3;
int* p1 = &room;
int* p2 = p1;
int* p3 = p1;
printf("room的地址:%d\n", &room);
printf("p1的值:%d p2的值:%d\n", p1, p2);
printf("p3的值:%d\n", p3); //输出十进制的地址
p3 = &room1;
printf("p3的值:%d,room1的地址:%d\n",p3,&room1);//不建议用这种方式
//使用16进制打印,把地址值当成一个无符号数来处理
printf("p1=0x%p\n",p1);
printf("p1=0x%x\n", p1);
printf("p1=0x%X\n", p1);
system("pause");
return 0;
}
4.访问指针的内容
#include <iostream>
#include <windows.h>
#include <string>
using namespace std;
int main() {
int room = 2;
int* girl = &room;
int x = 0;
x = *girl; //*是一个特殊的运算符,*girl 表示读取指针 girl 所指向的变量的值, *girl 相当于 room
printf("x:%d\n",x);
*girl = 4;//相当于room = 4;
printf("room:%d,*girl:%d\n",room,*girl);
system("pause");
return 0;
}
5.指针的访问总结:
#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
int main() {
int age;
char ch;
//定义了一个指针p,指针p本身也是一个变量
//指针p作为一个指针,可以指向一个整数
int* p;
char* c;
//指针p指向了age,p的值就是age的地址
p = &age;
c = &ch;
//scanf_s("%d",&age);
scanf_s("%d", p);
printf("age:0x%p\n", p);
printf("age:%d\n", *p); //*p表示读取指针所指的变量的值
system("pause");
return 0;
}