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;
}

posted on 2022-09-10 11:11  wshidaboss  阅读(263)  评论(0编辑  收藏  举报