// PTREE 可以理解为是 struct TreeNode * 的别名,
十余年的柏乡网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整柏乡建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联公司从事“柏乡网站设计”,“柏乡网站推广”以来,每个客户项目都认真落实执行。
// PTREE 类型的变量,即是指向 struct TreeNode 结构体变量的指针,
// 那么,PTREE * 类型的变量,就是指向 struct TreeNode 结构体变量指针的指针,
// 要理解为什么参数中传递的是指向 PTREE 类型的指针,首先要了解 C 语言参数传递的机制
// C 语言中,形参只是实参值的一份拷贝,它们仅仅是值相等,除此外再无其他关联,
// 重要的是,它们的地址不同,也就是说,改变了形参,实参并不受其影响。
// 而为了影响到实参,就需要知道实参的地址,通过其地址来修改实参。
// 通过把实参的地址传给形参,就可以修改与其相关联的实参的内容。
// C 语言的传参是基于传值的,理解了这个,由这类问题造成的困惑都会迎刃而解啦。
// 遇到指针问题,可以通过画图来帮助分析问题
// 要了解更多关于 C 语言传参机制的更多内容,可以再百度一下。
// 希望可以帮到你
兄弟,那个不是一级指针,那是指针数组
指针数组作为函数形参时会自动转换为指针的指针,也就是你说的二级指针
char **p=book;从这一行也能证明我说的,自动转换
特别注意:它只会转换数组的最内层(我有点分不清内外)
int arr[2][6];
int (*aa)[6] = arr;//对
//int *aa1[6] = arr;//错
//int (*aa2)[2] = arr;//错
//int (*aa3)[] = arr;//错
//int *aa4 = arr;//错
//int **aa5 = arr; //错
二级指针是用来指向一级指针的指针,一般用来操作多个一级指针,最常见的就是当做参数传入函数
举例,
一个字符串char str[20],我们一般用其指针str(也就是第一个字符的指针)来表示它,str是个一级指针.而当我们要批量处理多个字符串时,就需要使用指针的指针了
假设我们有三个字符串:char a[20],b[20],c[20],假如想要将它们传入函数,使用数组名的传入方法,我们需要将a b c分别填入形参表.而如果我们使用指针数组char * p[3]={a,b,c};此时只需,当我们要传入函数时,传入p即相当于将这三个字符串传入函数了(在函数中用p[0],p[1],p[2]来表示a b c,操作具体某个字符比如a[2]则用p[0][2]来表示)
void ChangeStrPo(char **p)改为 char** ChangeStrPo(),然后main里,ps=ChangeStrPo();
说明,你原来的changestrpo,p是ps的副本,malloc后,p改变了值,但是ps并没有改变。当传递指针的时候,可以通过*ps来改变指针所值的地址内存放的值,但是是改变不了实参ps本身的值。
二级指针和二维数组是两码事
你把 getSomething函数的参数类型改成char(*)[100]就可以了
就是这样:
void getSomething(char(*records)[100]){
records[0][0] = 'I';
records[0][1] = 'n'//这两句段错误;
}