指针(指针类型的作用,野指针,指针运算,指针-指针的运算,指针的关系运算,二级指针,指针数组)

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
指针就是变量,用来存放地址的变量(存放在指针中的值被当成地址来处理)
指针的大小在32位平台上是4个字节,在64位平台上是8个字节。

/*指针类型决定了
(1)指针进行解引用操作时,能够访问空间的大小
int* p:能够访问4个字节
char* p:只能够访问1个字节
double* p:能够访问8个字节
(2)指针走一步走多远(偏移几个字节)
int* p:p+1->偏移4个字节
char* p:p+1->只偏移了一个字节
*/

/*野指针指针指向的位置是不可知的(随机的,不正确的,没有明确限制的)
野指针出现的情况:1、指针未定义  2、指针越界访问    3、指针指向的空间释放*/

局部变量不初始化,默认是随机值

若在某些情况中不清楚让指针指向何处时,只需将指针指向空指针即可
eg:

int main()
{
    int a = 10;
    int* p = NULL;
    p = &a;
    *p = 20;
    printf("%d", a);
    return 0;
}

指针的运算
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    int i = 0;
    int *p = arr;
    for (i; i < 10; i++)
    {
        printf("%d ", *p);
        p++;
    }
    return 0;
}

指针 — 指针
int main()
{
    int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
    printf("%d",&arr[9] - &arr[0]);//&arr[9] - &arr[0]——计算数组内的元素个数
    //注意,相减的两个指针必须是同一个内存块里的,不然会出现错误

    return 0;
}
用指针-指针的方法求字符串长度
int my_strlen(char* str)
{
    char* start = str;
    char* end = str;
    while (*end != '\0')
    {
        end++;
    }
    return (end - start);
}
int main()
{
    char arr[] = "bit";
    int p = my_strlen(arr);
    printf("%d", p);
}

指针的关系运算
int main()
{
    int arr[5] = {};
    int* vp = arr;
    for (vp;vp<&arr[5];)
    {
        *vp++=1;//先给*vp赋值1,再给指针vp+1
    }
    int i = 0;
    for (i=0; i < 5; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

二级指针
int main()
{
    int a = 10;
    int* pa = &a;//int*—— *表示pa为指针变量,int表示指针变量所指的类型为int,即变量a的类型为int
    int** ppa = &pa;//ppa即为二级指针         int**——*表示ppa为指针变量,int*为指针所致的变量类型为int*
    **ppa = 20;//*ppa访问的是pa中所存储的地址      **pa先通过*ppa找到pa,然后对pa进行解引用操作,即*pa,即a
    printf("%d", a);//结果为:20
    return 0;
}

指针数组——指针数组是一个存放指针的数组,指针指的是所指对象的地址
int main()
{
    int a = 10;
    int b = 20;
    int c = 30;
    int* arr[] = { &a,&b,&c };//int* arr[] 称为整形指针数组
    printf("%d\n%d\n%u\n", *arr[0], *arr[1], *arr[2]);
    return 0;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值