c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

99.99%的人不会研究c 指针的高级用法 因为连课本都对此避之不及 实际应用一些小项目小问题也不会用双重指针啊啥的...

就导致绝大部分人,比如我都压根不探究这些

今天本着求知的态度去学习

 

首先来看指针运算,这个就当复习玩

打印指针 是地址 都懂 指针本来就取的地址 

 

指针加减整数呢?

 

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 本来pa 是15006356(地址) 怎么加了10就成了15006396? 不应该是15006366吗? 加了40

用double呢

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 怎么加了40?

用char

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 +5 之后确实是+5 不是+40

公式: 指针+- 整数  实际增加/减少为: 整数*sizeof(ElementType) 其中ElementType为数据类型

 指针- 指针:

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

 c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

 c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

 596-584 = 12 = 3*4 = 3*sizeof(ElementType)

公式: 指针+- 指针   实际增加/减少为: 地址差值 / sizeof(ElementType) 其中ElementType为数据类型

意思就是 他们差了3倍的数据类型单位长度啊

 

在连续内存中:

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 加1就是加了一个sizeof (int) 对的 这就是前面所讲指针的运算

 

这些等价:应该都懂

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 公式:

设数组名为arr,则 arr + n = &arr[n];//数组名就是数组首地址,函数名也是。

arr[n] = *(arr + n)

 

用指针遍历数组:

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

双重指针:

就是指向指针的指针。

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

 这段代码 目的是 把str的空间大小改为6。然后把china这个字符串拷贝进去。因为字符串以/0 结尾 所以大小不是5是6.

但是 事实上 这样做 str的大小呢 还是null

因为 函数传参是传值罢了。仅仅传一个值、想要改变真正的值,肯定要用地址。你用一个*类型的 去改动*类型 怎么可能呢。

这个分配的 6 存储空间 本质上是给了memorystr 然后局部变量 函数运行完毕释放了。

怎么真正改呢?

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

 我们不妨这么理解。要改动char str,需要修改char* str 

那么要改动char * str ,就要用到char** str 。

所以这个双重指针就是很简单 用来改变一重指针呗。

上边的代码 就是调用GetMemory时 因为参数是**     传值 传给了**一个*(能看懂么)

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 这个取地址就成了一级指针 * 

所以呢 这其中其实是修改了二级指针的指向

此时**memorystr = &str 即

**memorystr 指向了str的地址 

*memory 指向了str

对*memory指向的元素 (str)进行了改动 当然可以成功

再来看一个双重指针的例子

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

目的是改变传入的值是bbb 但是实际输出还是aaa

由上边讲到的,改变这个char * 肯定要用char**

 

 

 

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 

**p = &v 当做**p = *v

那么*p = v

p指针指向v

对*p赋值就是对v赋值 对吧

建议大家多找 多做一些这样的例子

 

函数指针:指向函数的指针变量 

int(*p)(int x , int y);

 

针函数:是一个返回指针的函数,其本质是一个函数,而该函数的返回值是一个指针。(没什么用)

这么写:

int *fun(int x,int y);
int * fun(int x,int y);
int* fun(int x,int y);

如何用函数指针调用函数:

c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

 c语言指针复习 难点突破 双重指针 函数指针结构体指针等...

 

上一篇:h5 实现扫码二维码及条形码(js多种实现方式)


下一篇:api