《程序员面试宝典》指针问题

原创 2015年07月07日 21:27:56

程序员面试宝典一书第7章,面试例题九,题目是问程序运行到哪一行会崩溃。

编写程序如下

#include <stdlib.h>
#include <stdio.h>
struct S
{
    int i;
    int *p;     
};

int main(void)
{
    struct S s;
    int *p = &s.i;    
    p[0] = 1;
    p[1] = 5;
    printf("%d %d\n", p[0], s.i);   //p = &s.i;   p[0] == s.i;
    printf("%p %p\n", &p[0], &s.i);
    printf("%d %d\n", p[1], s.p);   //p = &s.i;   p[1] == s.p;
    printf("%p %p %p\n", &p[1], &s.p, &s.p[1]);
    s.p = p;                        //p = &s.i -> s.p == p == s.i  
    printf("%d %d\n", p[0], s.i);
    printf("%p %p\n", &p[0], &s.i);
    printf("%d %d %d\n", p[1], s.p, s.p[1]);   //s.p[1] == *(&s.i + 1), 即s.i的地址加1,即为s.p。 
    printf("%p %p %p\n", &p[1], &s.p, &s.p[1]);
    s.p[1] = 1; 
    printf("%d %p %p\n", s.p, &s.p, &s.p[1]);   //s.p == s.p[1]  但是s.p[0] != s.i    //*s.p 相当于s.p[0],都是未作声明的地址,访问会出错。 
    system("pause");
}

运行结果:


以下程序会崩溃,主要原因是对一个未作声明的地址访问,会出错。

s.p[0] = 2; //程序崩溃;
*s.p = 2; //s.p[0] 相当于*s.p
指针和数组访问是很灵活的,需要特别注意容易出错。

PHP程序员面试中经常被提问的问题

1. Include 与 require的区别,require和require_once的效率哪个高?   Php在遇到include时就解释一次,如果页面中出现10次include,php就解释1...
  • dongsg11200
  • dongsg11200
  • 2013年08月17日 00:05
  • 4039

C/C++程序员应聘常见面试题深入剖析

C/C++程序员应聘常见面试题深入剖析 2006-02-27 22:20:00 分类: C/C++ C/C++程序员应聘常见面试题深入剖析 1       ...
  • zxl2016
  • zxl2016
  • 2016年07月28日 09:45
  • 1644

Android程序员必会的十大基础面试题----阿冬专栏

Android程序员必会的十大基础面试题!   1   Android中五种数据存储方式分别是什么?他们的特点?   Android提供了五种存取数据的方式 ...
  • zhangdong305
  • zhangdong305
  • 2016年10月14日 21:09
  • 5412

关于指针与类的内存分布问题(问题思考来自《程序员面试宝典》)

引起思考的例子: class A { public: int a_1,a_2; A() :a_1(1),a_2(2){} void func() { cout ...
  • Virtual_Func
  • Virtual_Func
  • 2016年03月29日 14:57
  • 329

C_C 程序员面试宝典——第8章_指针

  • 2012年10月09日 23:30
  • 512KB
  • 下载

19.c/c++程序员面试宝典-this指针

19.c/c++程序员面试宝典-this指针
  • gdut2015go
  • gdut2015go
  • 2015年11月18日 12:47
  • 598

程序员面试宝典随笔记(一)-----C++11智能指针

C++11中智能指针的原理、使用、实现  目录 理解智能指针的原理智能指针的使用智能指针的设计和实现 1.智能指针的作用        C++程序设计中使用堆内...
  • woalss
  • woalss
  • 2017年12月20日 23:45
  • 21

18.c/c++程序员面试宝典-函数指针

18.c/c++程序员面试宝典-函数指针
  • gdut2015go
  • gdut2015go
  • 2015年11月17日 19:57
  • 340

程序员面试宝典笔记2--指针和引用

1.this指针 2. a) int a b)...
  • eric491179912
  • eric491179912
  • 2011年08月16日 09:36
  • 482

重新开始战斗19-程序员面试宝典-P34_5.4面试题2--数据转换与指针转换

数据转换: 在表达式中,所有的数据都会向宽型转换,有两个原则: 1、为防止精度损失,如果必要的话,类型总是被提升为较宽的类型; 2、所有含有小于整型的有序类型的算术表达式在计算之前其类型都会被转...
  • u014224108
  • u014224108
  • 2014年04月03日 16:05
  • 368
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《程序员面试宝典》指针问题
举报原因:
原因补充:

(最多只允许输入30个字)