C语言指针2

1.不同类型的指针在解引用时有着不同的意义

char*的只能对应1个字节

int*的只能对应4个字节

他们的如:    int a =0;                int * p = &a;(p里边放的就是a的地址)

对于上边的p,它是char*类型的解引用时只能修改一个字节,int *的解引用时只能修改4个字节

因为char*类型的一次只能访问一个字节,int*类型的一次只能访问4个字节(double则8,short则2)

double*类型的访问一个int类型的那么我感觉可能会越位

有一个int* 和char* 的灵活运用(微信搜)

2.指针变量+1在微信搜(指针变量的+1)

3.用*p改变数组的值(微信搜*p改变数组的值)

4.void*类型指针的可以容纳任何类型的变量的地址,

但也有局限性:不能进行指针的+-整数和解引用的运算

5.const修饰变量(指针变量也是变量)使它具有常属性(即不能被直接修改了)(但它本身也还是变量)如const a=20;

但是可以通过指针找到变量的地址从而进行修改(如果修饰的是const int *pa = &a;则   *pa==55;    也会失效)

6.const修饰指针的时候,可以放在*的左/右侧

但是意义不一样

在左侧时固定的是*pa,在右侧时固定的是pa

7.指针-指针得到的是(整数)且它的绝对值是两个指针之间的元素个数(小的指针-大的指针得到的是负值)

但是指针-指针的前提条件是两个指针指向同一块空间

8.\0的ASCII是0;

9.野指针概念:野指针就是指针指向的位置是不可知的(随机的,不正确的)

野指针成因1.没有初始化指针

例如

但是局部变量没初始化与全局变量没初始化得到的情况不完全相同

野指针成因2.指针越界访问

比如用指针指向数组的地址,然后越界赋值,那么程序会崩

野指针成因3:指针指向的空间释放了

例如:

在原来的a的地址的值被破坏之前,*p是10,但是一旦地址的值受到了外界的干扰,则*p就不一定是10了

所以当我们不知道给某个指针初始化为什么的时候,可以这样:int *p = NULL;(即空指针)

*111.NULL为((void *)0) 

但即使是这样也不能:

int *p= NULL;     

*p=20;

这样的话程序会崩

10.全局变量默认初始化为零

静态变量也是一样

放在静态区的变量默认都是零

11.可以这样

int *p = NULL;

int a = 10;

p = &a;

12.所以不要返回局部变量的地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值