两指针不可求和!仅可求差。差值为相差n个基类型。
在两指针求差时,必须保证两指针的基类型一致,负责程序会报错。
在用const修饰普通变量时,被修饰的无法通过直接访问变量,对变量的值进行修改,但是,可以使用指针对该变量进行访问和修改。
这也是指针在程序中大多数的用途。
在用const对指针进行修饰时,如:
const int * p 此时我们可以对 p 的值进行修改;
但是不可以对 *p 进行修改!
因为此时const 修饰的实际时 int * 这个指针,所以不可以对 p 进行修改,无法通过 *p 对*p 指向的值惊醒修改。
万能指针:
void * p 这个指针因为指针类型是void 型,因此他可以接收任何类型的值。
数组拷贝函数:
void * memcpy(void * dest,const void * src,size_t n)
其中:因为用const 修饰了src,所以在此函数中无法对src 里的值进行修改,只能访问src。然后因为dest需要被写入数据,所以没有用const 修饰,最后面的n 是说:将src 中的前 n 个元素写入到dest 的位置中。在实际使用中,可以对传参时对src 或 dest + b,作用是把从 src 的第0 个元素开始的前b 个元素拷贝到 dest中
在指针函数中;
因为返回值是一个指针,所以返回值不可以是一个局部变量。因为在函数结束后,局部变量会被清除,无法正确返回值。
动态内存分配:
动态内存分配的实际是栈 向 堆 申请若干的空间
函数为: void *malloc(size_T size)
size 为你要申请的空间大小。函数会将堆空间中连续的size空间分配出来,并将这段空间的首字节的地址返回。在使用时可以定义一个相应类型的指针,接受分配好空间的地址。
在使用malloc 函数时必须调用 #include <stdlib.h>
使用完申请的空间后,必须要释放掉申请的空间:
使用 free函数:
例如 int *p = malloc(10 * sizeof(int))
此时,我们就向堆申请了一个40字节的空间;这篇空间的地址返回后由指针 p 接收了,
在使用完后:
free(p);
即对p 的空间进行释放。
动态申请的内存空间一定要及时释放,否则会造成内存泄漏!计算机的堆空间越来越小,随运行时间增加,计算机逐渐变得卡顿,而且后续要申请内存空间,可能会由于堆空间匮乏,无法成功申请。(在申请之后,也可判断是否接受到一个正常的内存地址来判断动态内存申请是否成功)