导读 | 首先,指针计算机中的所有内容都是数字。在C语言中创建变量时,编译器仅按地址处理它,但是在您的代码中,您可以通过两种方式访问它:按值和按地址。 |
首先,指针计算机中的所有内容都是数字。在C语言中创建变量时,编译器仅按地址处理它,但是在您的代码中,您可以通过两种方式访问它:按值和按地址。
时间-全局变量-存储在堆中
skip- 参数-存储在堆栈中
i- 局部变量-存储在堆栈中
“ Hello world-%d / n”-存储在堆中
堆是由编译器与您的代码链接的启动代码分配的内存块。创建方式并不重要,但并非所有编译器都一样。那是我们想要得到的技术。
为简化起见,假设变量Times 结束于内存位置256(0x100)。堆栈上的变量i 的位置为64(0x40)。文字“ Hello …”的位置为200(0xc8)。最后,跳过会得到68(0x44)。
现在假设您像这样调用function():
时间-存储在0x100-值为10
跳过-存储在0x44-值2
i- 存储在0x40-值0
未命名文字存储在0xc8-值“ Hello world-%d / n
现在寻址非常简单。在C语言世界中,当您使用不是指针的变量名时,编译器会将其视为“存储在地址中的值”。因此,当您使用变量skip时,编译器将使用“存储在0x44处的值”。该代码段中的所有变量均为“按值”,表示仅使用值。指针是变量的地址。假设我们这样做:
因此,使用上述所有数字,我们还将添加
TimesPtr -存储在地址260(ox104) -堆栈中的
数-存储在地址263(量0x108) -在堆
我们已将TimePtr 分配为Times 的地址,即0x100。在循环开始时,我们指定i = 0,因此0存储在0x40中。我们还分配Num ,它也是指向整数0的指针。编译器将创建代码,0被放入量0x108,地址数。
当您使用’*’运算符时,您正在告诉编译器使用您指定的变量“存储在地址中的值”。当仅使用变量名时,您将告诉编译器“存储的值”。
顺便说一句,在printf()调用中,将文字的地址传递给函数printf(),因为文字在编译器中仅具有一个地址,而不是名称(并且数组通过地址传递,并且该文字是一个字符数组) )。
创建链表最简单的方法是简单地将一个指针添加为指向该结构本身的结构成员。它是这样完成的:
现在,您需要在单个链表中插入和删除的操作。我将为您提供一个通用链表,以保存任何数据类型:
原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/tech/linux/124514.html