指针变量的类型的介绍

#include <stdio.h>
int main()
{
    int a = 0x44332211;
    int* pa = &a;
    char* pc = &a;
    printf("%p\n", pa);
    printf("%p\n", pc);
    int c = *pa;
    printf("%x\n", c);
    int b = *pc;
    printf("%x\n", b);
    return 0;//指针变量的类型,决定了解引用操作的时候,指针能够访问空间的大小。
}
//int* p ;*p能够访问四个字节
//char* p;*p能够访问一个字节
//double* p;*p能够访问八个字节

指针的步长

#include <stdio.h>
int main()
{
    int a = 0x44332211;
    int* pa = &a;
    char* pc = &a;
    printf("%p \n", pa);
    printf("%p \n", pa+1);
    printf("%p \n", pc);
    printf("%p \n", pc+1);
    return 0;
}
//指针类型决定了:决定了指针走一步走多远.(指针的步长)
//int* p;p+1 -->4
//char* p;p+1-->1
//double* p;p+1-->8

野指针

//野指针的形成主要有,
//1.指针未初始化
//2.指针越界访问,
//3.指针指向的空间释放
//避免野指针的出现,
//1.指针初始化
//2.小心指针越界,
//3.指针已经失效的时候,想要继续合法的存在,那就初始化为NULL
//4.指针使用前检查有效性,对指针进行判断,是否为NULL
//指针的运算,+-整数运算
//关系运算
//指针+-指针

int my_strlen(char* str)
{
    char* start = str;
    char* end = str;
    for (; *end != '\0';)
    {
        end++;
    }
    return  end - start;
    ;
}

#include <stdio.h>
int main()
    printf("%d\n", len);
    return 0;{
    char arr[] = "bit";
    int len = my_strlen(arr);

}//实现了求字符串长度

允许指向数组元素的指针与指向数组最后一个元素后面的那个内存位置比较,但是不允许与指向第一个元素之前的那个内存位置的指针进行比较。

二级指针

#include <stdio.h>
int main()
{
    int a = 0;
    int* pa = &a;
    int** ppa = &pa;//ppa就是一个二级指针
    //int*** pppa = &ppa;
    **ppa = 100;
    printf("%d\n", a);
    return 0;
}

对于二级指针最初步的一个了解和认识

指针数组,存放一组指针的数组

整形数组就是存放了一组整形,字符型数组就是存放了一组字符型,指针数组可以用来编辑一个数组,而不用[]标识符。