【C语言】—— 《C和指针》学习笔记4

指针

一、内存和地址

  • 内存中的每个位置由独一无二的地址标识
  • 内存中的每个位置都包含一个值
  • 变量名字与内存位置的关联并不是硬件提供的,它是由编译器为我们实现的。
  • 硬件仍然通过地址访问内存位置

二、值和类型

      int  a = 112,b = -1;
      float  c =3.14;
      int  *d = &a;
      float  *e = &c; 
  • 我们都知道,数据在内存中都是以二进制的形式储存的,也就是说变量在内存中的内容是一序列的0或者1的位,一序列的0或者1的位可以被解释为整数,也可以被解释为浮点数,因此我们判断一个变量是整型还是浮点型,其实是取决于变量的使用方式
  • 因此我们得出一个很重要的结论:不能简单的通过检查一个值得位来判断它的类型

三、间接访问操作符

  • 通过一个指针访问它所指向的地址的过程称为间接访问或者是解引用指针
  • 执行间接访问的操作符是单目操作符*
    指针
  • 实线的记法容易让用户产生误解,会以为指针执行了间接访问操作,但实际上间接访问操作不一定会执行
  • 事实上,如果不对指针进行间接访问操作,它的值只是简单的一些位的集合,只有在执行访问操作时,箭头才表示实际发生的内存访问

四、未初始化和非法的指针

       int          *p;
       ........
       *p = 12;
  • 这里声明了一个名叫p的指针变量,并把12赋值个p指向的内存位置。
  • 但是,声明p并未对p进行初始化,此时我们不是的p是指向哪个内存位置,因此我们无法预计12会存储在哪个位置。
  • 空指针NULL,表示某个特定的指针目前并未指向任何东西
  • 对一个空指针进行解引用操作是非法的

五、指针的使用实例

5.1计算一个字符串的长度
#include <stdlib.h>
#include <stdio.h>

size_t Strlen(char* string)
{
	int length = 0;
	while(*string++ != '\0')
		length += 1;
	return  length;
}
  • 在指针到达字符串末尾的NULL字节之前,while语句中的*string++表达式的值一直为真,它同时增加指针的值
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值