c语言学习6

×86 ---->32位的环境

×64 ---->64位的环境

指针:

1.指针是什么

       (1).指针是内存中一个最小单元的编号,也就是地址

       (2).平时口语中说的指针,通常指的是指针变量,指针变量就是一个变量,是用来存放内存地址的变量

       小总结:指针就是地址,口语中说的指针通常指的是指针变量

       注意:指针的大小在32位平台就是4个字节,在64位平台就是8个字节(不同平台指针大小不同)

2.指针和指针类型

       指针类型的意义:

       (1).指针类型决定了指针在被解引用的时候访问几个字节

              如果是int*的指针,解引用访问4个字节

              如果是char*的指针,解引用访问1个字节

              可以推广到其他。

       (2).指针的类型决定了指针+-1操作的时候,跳过几个字节

              决定了指针的步长

还有就是就算类型所占相同大小的空间,也不能混用,例int*和float*不能混用

3.野指针:

       概念:野指针就是指针指向的位置是不可知的(随机的、不正确的、没有明确限制的)

       野指针成因:

       (1).指针未初始化

       (2).指针越界访问

       (3).指针指向的空间释放

       规避野指针的出现:

       (1). 指针初始化

       (2). 小心指针越界

       (3). 指针指向空间释放即使置NULL

       (4). 避免返回局部变量的地址

       (5). 指针使用之前检查有效性            

              以上可以一定程度上避免野指针的出现,但并不是能避免所有野指针的出现

定义还没变成野指针,在用了之后才变为了野指针!

4.指针运算:

(1).指针+-整数

       指针解引用之后+1是值+1

       指针变量+1是地址向后跳1

例子1:

把数组内所有元素都改为1

#include <stdio.h>

int main()

{

       int arr[10] = { 0 };

       int i = 0;

       int sz = sizeof(arr) / sizeof(arr[0]);//计算数组大小

       法1:数组法

       for (i = 0; i < sz; i++)

       {

              arr[i] = 1;

       }

       法2:指针法1.0

       int* p = arr;

       for (i = 0; i < sz; i++)

       {

              *p = 1;//

              p++;

       }

       指针法2.0

       int* p = arr;

       for (i = 0; i < sz; i++)

       {

              *(p + i) = 1;

       }

       return 0;

}

(2).指针-指针

       A:指针-指针(取绝对值)得到的结果是指针和指针之间元素的个数

       注意:不是所有的指针都能相减,只有指向同一块空间的2个指针才能相减

(3).指针的关系运算:比较大小

5.数组和指针

       数组:一组相同类型元素的集合

       指针:是一个变量,存放的是地址

       但是通过指针可以访问数组!!,还是那句话,数组名是元素首地址

6.二级指针

       二级指针变量是用来存放一级指针变量的地址的

7.指针数组

       存放指针的数组就是指针数组。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值