`

C指针的小细节

阅读更多
先看一段代码:

struct S {
     int i;
     int * p;
};
void main()
{
     S s;
     int * p = &s.i;
     p[0] = 4;
     p[1] = 3;
     s.p = p;
     s.p[1] = 1;
     s.p[0] = 2;
}

程序会在哪一行死掉

这是今天做的一个笔试题目,C的指针随意乱指,实在是混乱。
代码来看,在p[1]=3;这个语句上就有点不知所云了。

经过追踪调试,可是发现代码是死在了s.p[0] = 2; 这一句上。
接下来详细说一下程序每一步的执行:
int *p = &s.i;  //指针p指向结构体s内部的变量i
p[0] = 4;       //i的值变为4
p[1] = 3;       //p[1]指向的其实是结构体s内部的指针p,这个语句使得结构体内部指针p指向内存0x3单元
s.p = p;        //结构体内部指针p指向变量i
s.p[1] = 1;     //这个地方实际上是改变的s.p,使s.p指向了地址为0x1的内存单元。
在调试的时候发现是这个样子的情况,但是没明白为什么改变的是s.p
s.p[0] =2;      //s.p[1]指向0x1,s.p[0]自然没法子再向前寻址了,程序就在这儿死掉了
分享到:
评论

相关推荐

    关于指针细节学习,简单清楚!

    ### 指针细节学习详解 #### 一、理解指针的基本概念 ##### 1. 指针的定义 指针是一种特殊的数据类型,在计算机编程中被广泛使用。指针变量用来存储其他变量的内存地址。理解指针的关键在于区分以下几个概念: - ...

    C语言指针经典题目

    根据提供的文件信息,我们可以归纳总结出以下几个相关的C语言指针知识点: ### 1. 使用指针比较并交换三个变量的值 #### 代码解析 在第一个示例代码中,我们看到一个程序用来比较并交换三个整数变量 `a`, `b` 和 `...

    【C语言】两个指针的坑

    在C语言和C++语言中,指针是用来直接访问内存的一种方式。指针在使用不当的情况下非常容易出现问题,尤其是内存越界、野指针(未初始化或者已经释放的指针)、空指针访问等,都会造成程序的运行时错误,甚至导致程序...

    对C语言指针知识的总结

    以下是对C语言指针相关知识点的详细总结。 首先,指针变量是一种特殊类型的变量,其存储的是内存地址。这些地址是针对基本数据类型、数组、函数等的数据单元的引用。通过指针变量,程序可以间接地访问和操作这些...

    C语言指针与内存泄漏

    ### C语言指针与内存泄漏 #### 引言 对于许多使用C语言的开发者而言,指针和内存泄漏是他们在编程过程中遇到的最大挑战之一。这些问题不仅耗费了大量的调试时间,有时甚至会让开发工作变得异常艰难。然而,一旦...

    C语言指针链表例子源码

    ### C语言指针链表实例解析 #### 一、引言 在计算机科学领域,链表是一种常见的数据结构,广泛应用于各种场景。本篇文章将基于一份C语言实现的链表示例代码,深入剖析其核心概念和技术细节。通过这份资料,初学者...

    c语言习题集合(指针)

    本资源摘要信息提供了一个C语言指针习题集合,附带答案,可以作为初学者练习的小题库。以下是对该资源中所包含的知识点的详细解释: 1. 指针的基本概念 指针是一种复杂的数据类型,它可以存储变量的地址。指针变量...

    NULL指针、零指针、野指针定义及区别

    实际上,程序员并不需要关心空指针的具体实现细节,因为编译器会处理这些细节,并确保在使用空指针时不会引发错误。 ##### 1.6 对空指针实现的保护政策 为了防止程序试图访问空指针所指向的位置而导致程序崩溃或...

    指针函数和函数指针变量

    在C语言中,指针和函数是两个非常重要的概念,而将...在阅读提供的《函数指针.pdf》和《C语言教程之 指针.PDF》文档时,你可以深入学习这两个概念的细节,包括如何声明、如何使用,以及它们在实际编程中的各种应用。

    C语言培训 指针 数组 结构体 链表

    【C语言培训 指针 数组 结构体 链表】 C语言是一种强大的、低级别的编程语言,被广泛用于系统开发、嵌入式编程以及各种软件开发中。掌握C语言的关键在于理解和运用指针、数组、结构体和链表等核心概念。 **一、...

    教你C语言中的指针学习

    在C语言中,指针是其核心特性之一,它提供了对内存...总的来说,掌握C语言中的指针涉及深入理解内存管理、类型系统以及程序执行的底层细节。通过不断地练习和实践,你将能更熟练地运用指针,提升你的C语言编程能力。

    C语言的那些小秘密之指针(三)

    总的来说,C语言中的指针在处理字符串时提供了极大的便利,但同时也需要注意指针操作的细节,例如正确地更新指针和索引,避免出现错误。理解这些基础知识对于编写高效且安全的C语言程序至关重要。

    这里是c语言一个指针题1.txt

    标题“这里是c语言一个指针题1.txt”表明了该文件是一道关于C语言指针的练习题。通过这个标题我们可以推测,题目将涉及C语言中的指针概念及其在实际编程中的应用。 ### 描述分析 描述部分提到“这里是c语言一个指针...

    C语言中的指针和指针教学.pdf

    在机实验环节,C语言指针的使用非常灵活。大多数学生在实际编程时经常出错,而这些错误往往难以发现。为提高学生正确、灵活地运用指针解决问题的能力,在整个教学过程中要加强实践环节。 其一、开设验证性实验。...

    c和指针(pointers on c)习题答案(课后答案补充)

    分析C程序运行时的环境,包括堆栈管理、异常处理机制等,帮助学生理解程序执行的底层细节。 通过上述章节的学习,学生不仅能够掌握C语言的基础知识,还能深入理解指针这一关键概念,从而具备解决复杂问题的能力。每...

Global site tag (gtag.js) - Google Analytics