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存储方式:
double存储方式: