C语言小笔记——指针

       C++ 引用(底层是指针)

       C语言程序在内存中的分布 4G的虚拟内存空间 编号:0x0000 0000 - 0xffff ffff
在这里插入图片描述
4G = 2^2 * 2^30 byte = 2^32 byte

       一个地址只能存储1byte数据
       所谓的内存 其实是一个 int 类型的编号 通常显示为十六进制 %p

       指针即内存地址

       定义变量意味着分配内存 变量其实是代表着那一片内存里的数据,操作变量实际上是操作内存里的数据, 所有的变量(除了register)其实都可以通过&来获取该变量在内存中的存储位置,如果确定了一个内存地址,可以通过*来获取该内存区域里的数据。


& 取址运算符 变量(除了register)
*取值运算符 确定地址的类型 涉及一个取多少个字节数据的问题

&* *& 相互抵消 过程正好相反


指针变量: 存储内存地址的变量
指针变量的定义:
       数据类型*标识符:* 在定义时表示是指针类型
       int *p; p是int*类型
       int *p1,p2; p1是int *类型 p2是int类型

指针变量初始化:
       指针变量一般初始为NULL       空指针       0x0000 0000
       一般用 != NULL 来判断一个指针变量是否可以取*运算


       野指针:未初始化的指针变量(指向不确定 指针变量中存储的值不确定)
       野指针非常危险 ,编译时不会检查;程序可能正常,可能逻辑错误,可能崩溃



万能指针 void *:
       任何类型的指针都可以隐式转换成void *
       void*类型的指针都可以隐式转换为任何类型的指针
       除上述情况以外,任何指针类型之间的转换需要强制类型转换
       (目标类型)源变量
       不能对万能指针进行取*运算


指针变量的操作:
       指针变量 = 指针(内存地址 &变量)
       *指针变量 取内存地址的值


指针变量加减整数±:
       指针变量+1 指针变量的值加了一个内存地址中数据类型的单位长度

指针与一维数组(数组是一片连续的内存空间):
       [] 数组下标运算符 *()
       arr[i] == *(arr+i)
       *(arr+i) == *(i+arr) == i[arr]
       int arr[10] = {0};
       arr == &arr[0] 一维数组名即首元素地址
       &arr[0] == &*(arr+0) == arr


数组作为函数参数传递时:传递的其实是数组首元素的地址

void func(int arr[长度],int n){
    sizeof(arr)  == 4/8
}
void func(int *arr,int n){
    \\在函数中修改数组元素的值会影响实参数组的值
}

sizeof(指针) == 4/8

猜你喜欢

转载自blog.csdn.net/LUCAS004/article/details/107433352