一、指针补充
1.指针类型的意义
指针类型决定了指针在被解引用的时候访问几个字节, int指针,解引用访问4个字节, char指针,解引用访问1个字节
指针类型决定了指针的步长(指针走一步可以走多远)
int arr[10]={0};
int* p=arr;
*(p+1)=1; //int* 在加一的时候会移动四个字节
char* q = arr;
*(q+1)=1; //char* 在加一的时候,每次只能移动一个字节
*称之为 解引用操作符*
*p就是对p进行解引用操作,找到它所指向的对象a
int* p,p是指针,*p是对指针p的解引用
*LinkList,LinkList是指针,*LinkList是自己定义的数据类型
2.函数声明
void* malloc(int size);
malloc 向系统申请分配指定size个字节的内存空间。返回类型是 void* 类型。void* 表示未确定类型的指针。C,C++规定,void* 类型可以强制转换为任何其它类型的指针。
malloc 只管分配内存,并不能对所得的内存进行初始化,所以得到的一片新内存中,其值将是随机的。malloc分配的内存空间在逻辑上连续的,而在物理上可以连续也可以不连续。
int* p;
p = (int*)malloc(sizeof(int));
//做了两件事,给值给内存,给值是给分配的内存的地址值,给内存是分配的内存可以给它使用
3.对空指针free没问题,n次也没问题,但对非空指针free两次会出问题。所以最好先free再赋null。
二、指针和指针引用作为函数的参数
1.指针作为函数的参数
2.指针引用作为函数的参数
区别:
从结果可以知道
指针作为函数参数的时候,在test1被调用的时候,是需要重新开辟一个新的空间p
而指针引用作为函数参数的时候,在test1被调用的时候,并没有开辟一个新的空间,而是直接用传递进来的指针
作用:
指针作为函数参数的时候,能改变的只能是指针所指向的空间位置的值
指针引用作为函数参数的时候,能改变的是指针本身(指针的指向or指针变量的值)和指针所指向的空间位置的值。
三、数组名和数组指针作为函数参数
#include<iostream>
#include<cstdlib>
using namespace std;
void fun1(int* a){
cout<<"-2>"<<a<<" "<<&a<<endl