C语言关于指针的注意事项

一、指针的四个关键概念
1、指针的类型
2、指针指向的类型
3、指针的值,也就是指针指向的地址
4、指针自己所占用的内存空间
注意:指针变量所存的内容就是内存的地址编号!

例如:
int **pp = NULL;
1、指针的类型是 int **
2、指针指向的类型 int *
3、指针的值为NULL
4、指针自己所站内存的大小  sizeof(pp)

二、强制类型转换
强制类型不会改变内存中二进制的排列与顺序,只会将二进制按照目标类型解释。
例如:
int i = 10;
二进制位 0110;
float f = (float)i;
变量f的二进制还是 0110

三、关于CONST修饰变量
看const修饰变量的时候,完全可以将数据类型名视而不见
例如
int const *p;  //修饰*p , p可以变 , *p不能够变
const int *p;  //修饰*p , p可以变 , *p不能够变
const int * const p; //修饰p和*p , p不可变, *p也不可变

四、关于变量类型
1、数据类型的本质是固定内存空间大小的别名
2、变量的本质是一段连续内存空间起始地址的别名

五、关于变量声明的意义
1、建立变量符号表
通过声明变量,编译器可以建立变量符号表,如此一来,程序中用到了多少变量,每个变量的类型是什么,编译器非常清楚,是否使用了没有声明的变量,编译器在编译期间就可以发现。从而帮助开发人员远离由于疏忽而将变量名写错的情况
2、变量的数据类型指示系统为变量分配多少内存空间
3、变量的数据类型指示了系统如何解释存储空间中的值,同样的数值,不同的类型将有不同的解释。int占据4个字节,float也占据4个字节,在内存中同样是存储的二进制数,并且这个二进制数也没有标志区分当前是int型还是float型。如何区分?就是通过变量的数据类型来区分。由于声明建立了变量符号表,所以系统知道变量该如何解释
4、变量的数据类型确定了该变量的取值范围
例如短整型数据取值-32767~32767之间
5、不同的数据类型有不同的操作
如整数可以求余。C语言用符号”%”表示求余。整数可以,实数不可

六、关于函数调用传递指针的总结
1、如果在被调函数中想修改主调函数中变量的值,则需要将主调函数中的变量的地址(指针)传递到被调函数中
2、如果主调函数要传递一个超大的数据到被调函数中时,也可以将主调函数的变量的地址(指针)传递到被调函数中,这样有利于提高程序的性能
3、传递N级指针是为了修改N-1级指针的值,
     例如 : int *p;如果需要修改p的值,则需要将&p传递到函数中,才能修改p的值

七、关于指针与数组互换的问题
在表达式中,指针和数组是可以互换的,因为他们在编译器里面的最终形式都是指针,并且都可以进行取下标操作

八、数组与指针的区别
数组: 一个数组就是一个地址,并且该地址是一个常量值,不能改变。因此,数组名不能作为左值。
指针: 一个指针就是一个地址的地址 , 并且该地址是可以改变的。也就可以作为左值。

九、指针与地址的区别
指针就是地址,但地址并不是指针。指针有类型,地址没有类型。

十、传值与传址的区别
c语言其实只有一种传值方式,就是按值传递
按值、按址传递的区别在于,在函数中使用的方式而已。如果在函数中是要修改地址所指向内存的值,则可以修改实参地址指向的内容。因为在内存中内存地址是唯一的,所以不论在什么地方,都可以通过地址来修改内存中的值


指针变量总结

 

转载于:https://www.cnblogs.com/cmacro/p/6373751.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值