1、指针是什么?

  指针首先是C语言中的一种数据类型,用该种类型定义的变量成为指针变量,该变量中存储的是一个地址。

2、指针的大小?

  32位系统下:4字节;
  64位系统下:vs编译器是按照32位方式编译的:4字节;可以对编译器进行设置,让编译器按照64位方式编译:8字节。

3、指针的操作

  解引用 * 和 ->
  ->一般应用于类和结构体中,用于访问其成员。

注意:
对指针进行++、- - 、+、-数字,一般针对的是指针指向一段连续的空间才有意义。
指针相加没有意义,指针相减指两个指针之间相隔元素的个数。

4、const修饰指针

//常量指针:修饰的是*p,指针的指向可以修改,指针指向的内容不能通过该指针来修改。
const int* p;
int const * p;
//指针常量:修饰是指针p,指针的指向不可修改,指针指向的内容可以修改。
int * const p;
//特点:指针的指向和指针所指向的内容都不可修改。
const int * const p;

5、指针的应用

int array[5];

//数组指针:是一个指针,该指针专门用来指向数组。
int (*p)[5];
//指针数组
int* p[5];
//函数指针
int (*pf)(int left, int right);

6、指针和数组的区别

a、数组是存放相同类型元素的一个集合,底层空间是连续的;指针是用来存放地址的。
b、数组的大小与元素个数、数组元素类型有关;指针的大小是4个字节或8个字节
c、数组和指针是两个不同的对象。
注意:
  数组名是不能进行++/- -;
  &array和sizeof(array)此时数组名表示数组本身,其它方式都表示数组首元素地址。

7、strlen和sizeof的区别

  a、sizeof是运算符,strlen是函数;
  b、sizeof会根据类型确定内存空间的大小,不关心内存中存储的数据,strlen是求字符串长度的,计算的是一个字符串在’\0’之前出现多少个字符。
  c、sizeof在编译时就计算好了,而strlen要在运行时才能计算。

8、使用指针的注意事项

a、一般情况下,当定义了一个指针变量时,最好让指针有一个合法的指向,如果没有合法的指向,则应该让该指针指向NULL。
b、每次使用指针,最好进行判空。
c、避免产生野指针||垂悬指针
  野指针:指针首次使用之前没有进行必要的初始化,严格的说,在编程语言中的所有未初始化的指针都是野指针。
  垂悬指针:指向曾经存在的对象,但该对象已经不再存在了。结果未定义,往往导致程序错误。

9、整形数据在内存中是如何进行存储的?为什么?

  计算机中是以补码的形式存储整数的,计算机只有加法没有减法,原码和反码存储都有一定的弊端。原码:让符号位也参与计算,正数和负数相加,结果不正确;反码:没有解决0有两种形式的问题。

10、浮点类型的数据在内存中是如何存储的?

  根据国际标准IEEE(电子与电气工程协会)规定,任何浮点数的二进制数存储都要遵循以下公式进行转换:
NUM = (-1) ^ s * M * 2 ^ E

S : 当S为1时,表示为负浮点数,当S为0时,表示正浮点数
M: 表示有效数 ,1<=M<2
2^E: 表示指数

float存储方式:

c语言redisAsyncContext C语言指针_指针


double存储方式:

c语言redisAsyncContext C语言指针_浮点数_02