指针数据类型

本文深入解析了指针的概念,包括指针的基本定义、占用内存空间的大小、如何进行指针操作及注意事项等内容,并通过实例演示了指针在实际编程中的应用。

指针是一种数据类型, 指针也是一种变量

  • 占有内存空间,用来保存内存地址

  • 测试指针变量占有内存空间大小

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    char  p = 100;
    char * p1 = 100;
    char **** p2 = 100;

    printf("p:%d,p1:%d,p2:%d\n", sizeof(p),sizeof(p1), sizeof(p2));
    system("PAUSE");
    return 1;
}/*
是指针变量占用内存的大小(字节数).
在32位机上,所有指针类型变量占用内存字节数都为4
因为32位机就是 4字节 
如果在64位机上,指针占用内存大小就是:
8个字节.
*/

(*p)操作内存

在指针声明时,*号表示所声明的变量为指针
在指针使用时,*号表示 操作 指针所指向的内存空间中的值
*p相当于通过地址(p变量的值)找到一块内存;然后操作内存
*p放在等号的左边赋值(给内存赋值)
*p放在等号的右边取值(从内存获取值)
注意: 指针变量和它指向的内存块是两个不同的概念

含义1 给p赋值p=0x1111; 只会改变指针变量值,不会改变所指的内容;p = p +1;

含义2 给*p赋值*p=‘a‘; 不会改变指针变量的值,只会改变所指的内存块的值

含义3 =左边*p 表示 给内存赋值,=右边*p 表示取值 含义不同
这里写图片描述

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
    char a = 10;
    int *p3 = NULL;
    p3 = &a;
    *p3 = 20; //间接的修改a的值
    //*就像一把钥匙 通过一个地址(&a),去修改a变量的标示的内存空间

    {
        int c = 0;
        c = *p3;  //c=20
        //*p放在=号左边 写内存
        //*p放=号的右边 读内存
        printf("c:%d \n", c);
    }

    {
        char *p4 = NULL;
        p4 = (char *)malloc(100);
        p4 = (char *)malloc(200); //修改的只是指针指向的内存块

    }
    system("PAUSE");
    return 1;
}
#define _CRT_SECURE_NO_WARNINGS


#include <stdio.h>
#include <stdlib.h>
#include <string.h>

char *getStr81()
{
    char *tmp = NULL;
    tmp = "abcdefgf";
    return tmp;
}

void main()
{
    char *p = getStr81();
    printf("p:%s \n", p);
    *(p+2) = 'r';  //经常出现的错误 保证指针所指向的内存空间 可以被修改
    //保证指针所指向的内存空间 可以被修改,有时候指针指向常量区(隶属于全局静态区),是不可修改那部分内存空间的
    system("pause");
    return ;
}

指针是一种数据类型,是指它指向的内存空间的数据类型

指针步长(p++),根据所指内存空间的数据类型来确定

 p++=(unsigned char *)p+sizeof(a); 

结论:指针的步长,根据所指内存空间类型来定。
注意: 建立指针指向谁,就把把谁的地址赋值给指针。图和代码和二为一。不断的给指针变量赋值,就是不断的改变指针变量(和所指向内存空间没有任何关系)。

指针做函数参数 形参有多级指针的时候,
站在编译器的角度 ,只需要分配4个字节的内存(32bit平台)。所以在分析参数的时候只需要站在编译器的角度考虑即可
当我们使用内存的时候,我们才关心指针所指向的内存 是一维的还是二维的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值