做网站要什么颜色模式,影视小程序搭建,西地那非片的功能主治,建筑施工组织设计毕业设计如果对指针基础知识已经有可以直接跳到 函数的指针传参与解引用#xff0c;哪里不明白可以评论#xff0c;随时解答。
目录
所以就有了一句话#xff1a;指针就是地址#xff0c;地址就是指针
对于指针在C语言中#xff0c;指针类型就是数据类型#xff0c;是给编译器… 如果对指针基础知识已经有可以直接跳到 函数的指针传参与解引用哪里不明白可以评论随时解答。
目录
所以就有了一句话指针就是地址地址就是指针
对于指针在C语言中指针类型就是数据类型是给编译器看的也就是说指针类型与数组、int、char这种类型是平级的是同一类的。 指针的简单使用 a;就是取出a的地址 解引用 如何拆解指针类型 我们看到p的类型是 int* 我们该如何理解指针的类型呢 指针的大小 补充 函数的指针传参与解引用
那么效果就是将代码根本跑不了
wow 为什么要用一级指针接收还要返回一级指针
内容便是以上如果哪里有问题可以评论随时回复
感谢观看 地址就好比一栋楼上的每层楼的房间编号有了房间编号就容易去找到对应的房间不需要挨个对应查找
如果把上⾯的例⼦对照到计算机中⼜是怎么样呢
我们知道计算机上CPU中央处理器在处理数据的时候需要的数据是在内存中读取的处理后的 数据也会放回内存中那我们买电脑的时候电脑上内存是8GB/16GB/32GB等那这些内存空间如何 ⾼效的管理呢
其实也是把内存划分为⼀个个的内存单元每个内存单元的⼤⼩取1个字节
其中每个内存单元就好比一个学生宿舍一个字节空间里有8个比特位比如一个宿舍就是一个字节单位而8个学生每一个就是一个比特位
每个字节单元都有对应的序号也就比如每个宿舍都有对应的宿舍号在计算机中我们 把内存单元的编号也称为地址。C语⾔中给地址起 了新的名字叫指针。 所以就有了一句话指针就是地址地址就是指针 这句话要说他对他也对要说错也有点问题 对于指针在C语言中指针类型就是数据类型是给编译器看的也就是说指针类型与数组、int、char这种类型是平级的是同一类的。 所以每个指针他自己就有自己的地址而其该指针在内存中存的便是他指向的内容地址
所以指针就是地址但其类型不是地址是数据类型 指针的简单使用 int main()
{int a 1;int* p a;return 0;
} a;就是取出a的地址 在内存中其存的内容便是 解引用 解引用简单来说就是指针通过地址找到该指针指向的内存空间进行访问与修改 看以下代码便是解引用的使用 如何拆解指针类型 我们看到p的类型是 int* 我们该如何理解指针的类型呢 这⾥p左边写的是 int* * 是在说明p是指针变量⽽前⾯的 int 是在说明pa指向的是整型(int) 类型的对象。
同理还有char*类型的指针double*的..... 指针的大小 前⾯的内容我们了解到32位机器假设有32根地址总线每根地址线出来的电信号转换成数字信号后 是1或者0那我们把32根地址线产⽣的2进制序列当做⼀个地址那么⼀个地址就是32个bit位需要4 个字节才能存储。 如果指针变量是⽤来存放地址的那么指针变的⼤⼩就得是4个字节的空间才可以。同理64位机器假设有64根地址线⼀个地址就是64个⼆进制位组成的⼆进制序列存储起来就需要 8个字节的空间指针变量的⼤⼩就是8个字节。 补充 对于指针还有void* 的还有用const修饰指针整数野指针assert断言字符指针字符指针常量这里不在多赘述
感兴趣的可以去了解在网上搜一下就出来了。 函数的指针传参与解引用 这里将会详细讲解 函数的指针传参与解引用问题 我们学c语言遇见过最多的库函数便是scanf与printf那么你真的了解他吗
对于scanf我们都知道对应的数后面要填地址那么我们又知道除了特殊条件下数组名表示首元素地址那我们是不是可以用函数名来单独接收第一个元素呢
那么看一下代码 我们理解是正确的那么再看以下代码
int main()
{int a 10;int* p a;int* ps p;*ps 50;return 0;
}
请问运行完后的代码会有什么效果
A a会变为50 B p存的地址会变
C a不会变化还为10 D没有任何效果 首先这段代码没有任何问题 选什么呢
其实会将a变为50
为什么呢其原因就是我们先将a赋给int* p那么p这个指针里面的内容就会存着a的地址
又将p的内容赋给ps指针那么对ps指针进行解引用自然就会修改a的值
问题又回来了如果将ps变为二级指针呢别的不改 那么效果就是将代码根本跑不了 原因就是
在给定的代码中存在类型不匹配的错误。错误出现在将变量a的地址赋给指向指针的指针ps时应该使用符号获取指针p的地址。
在原始代码中将整数指针p赋值给指向指针的指针ps是不正确的因为ps应该指向一个指针而不是一个整数。
通过更正代码中的错误我们可以确保指向指针的指针ps指向指针p然后通过双重指针ps来修改变量a的值。 了解了这些我们知道需要加一个
int main()
{int a 10;int* p a;int** ps p;*ps 50;return 0;
}
效果会产生什么 更上面同样道理但是ps是一个指向指针的指针那么对其解引用就会修改p的内容改变其指向的内容 16位的50就是32 理解了这些我们在讲以下链表哪里的指针内容 typedef int SLDataType;typedef struct SLList
{SLDataType x;struct SLList* next;
}SL;int main()
{SL* SLListNULL;SLPushFront(SLList, 5);return 0;
}
我们要想进行修改指针指向的内容我们就需要传地址那么我们是要修改指针的内容就需要进行用二级指针接收 SL**接收
这一点很好理解那么我们看以下力扣上链表的函数 wow 为什么要用一级指针接收还要返回一级指针
一开始我也思考了很久后来慢慢就理解了其基本原理就是 上面举的第二个例子因为他这个函数传的不是地址而是
SLPushFront(SLList, 5);
传的是其值但其他本身就又是一个指针其本身就存着别人的地址归根揭底还是传的是地址所以用一级指针接收进行解引用同样可以改变指针指向的内存
内容便是以上如果哪里有问题可以评论随时回复
感谢观看 最后附上两道指针题 大家看一下这是什么