`
haoningabc
  • 浏览: 1482898 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

指针和数组

    博客分类:
  • c
c 
阅读更多
转载http://kan.weibo.com/con/3512394345711963

C程序:考考你(04)

一、取材于某著名公司的软件人员面试题,请问下面程序的输出结果是什么:
#include <stdio.h>  
int main(void)  
{
   int a[5] = {1,2,3,4,5};
   int *ptr = (int *)(&a+1);
   printf("%d, %d", *(a+1), *(ptr-1));
   return 0;
}
答案:2, 5

二、理由解释:
(1) a是数组首地址,也就是a[0]的地址,(a+1)是数组下一元素的地址,即a[1]的地址,因此*(a+1)就是a[1]的值。
(2) &a是对象首地址,该对象是5个int长度的类型,(&a+1)是对象地址加一,即对象首地址加了5个int的长度,因此(&a+1)是a[5]的地址。

注:换个写法是否能有助理解。
#include <stdio.h>  
int main(void)  
{
   int a[5] = {1,2,3,4,5};
   int (*ptr)[5] = &a;
   ptr++;
   printf("%d, %d", *(a+1), *((int *)ptr-1));
   return 0;
}

三、我的提示:
   不同类型的指针加一之后其地址增加的值是不同的,char型指针加一地址增加1,int型指针加一地址增加4,int (*)[5]型指针加一地址增加5个int长度,即20。由此可知对指针进行代数运算是有风险的,因此即将颁布的国军标《军用软件C/C++语言安全子集》中有建议准则“5.3.2.3 谨慎对指针进行代数运算”。
分享到:
评论

相关推荐

    指针和数组使用方法例子

    在C语言中,指针和数组是两种非常重要的...在该文件中,可能会包含一些使用指针和数组的实际例子,例如动态分配数组、指针数组、多维数组等复杂应用场景。通过实际的代码运行和调试,你将对指针和数组有更深入的理解。

    栈字符数组&混淆指针和数组所导致的错误

    通过深入理解这些概念,你可以更好地编写代码,避免因栈字符数组和指针数组混淆而产生的错误,提高程序的稳定性和安全性。在实践中,应多加注意这些细节,不断积累经验,才能写出更加健壮的程序。

    pointer && data.rar_指针和数组

    这段代码定义了一个函数`printArray`,它接受一个数组和其大小,然后使用指针`ptr`从数组首元素开始逐个打印元素。`ptr 确保不会超出数组范围,因为`arr + size`实际上指向数组的末尾位置。 除了基本的遍历,指针还...

    初探Xcode中指针和数组的使用

    ### 初探Xcode中指针和数组的使用 #### 指针概念解析 在计算机编程中,尤其是在像Objective-C这样的语言中,指针是一个非常重要的概念。它允许程序员直接控制内存,这对于提高程序效率至关重要。理解指针的基础...

    语言详解指针和数组PPT学习教案.pptx

    动态数组和多维数组** - 多维数组在内存中是连续的,第一维的大小可以动态创建,但其他维度的大小需要在声明时指定。 - 通过指针可以灵活地传递和处理多维数组,如通过指针传递二维数组的行指针数组,或者使用指针...

    指针和数组及算法工具.zip

    在编程领域,指针、数组和算法是至关重要的概念,它们构成了程序设计的基础。下面将分别探讨这些主题,并结合它们之间的联系,以帮助你更好地理解和应用这些知识。 **指针** 指针是C/C++等编程语言中的核心概念,...

    编程村一日游 什么是编程 C语言指针和数组的区别 PPT

    不久前,我应邀去和学弟学妹们(非本专业大一)聊天,他们让我简单地介绍一下什么是编程,以及C语言中指针和数组的关系。 于是我做了一个PPT,并在每班邀请一男一女两位同学来现场表演“指针”和“数组”,现场气氛...

    初探xcode中指针和数组的使用

    ### 初探Xcode中指针和数组的使用 #### 指针概念与实践 在探讨Xcode中指针的使用之前,首先需要理解什么是指针以及它们在编程中的重要性。 **指针的基本概念** 指针是一种变量类型,它存储的是其他变量的内存...

    C++指针及数组应用

    指向指针的数组则允许我们创建指针数组,这可以被看作是一种简化多级指针的手段。而指针与类对象结合使用时,可以实现更复杂的构造,例如实现多态、虚函数等面向对象的高级特性。 C++中的类型修饰符,如const、...

    数组与指针区别(很全面)

    本文旨在澄清关于数组名是否等同于指针这一常见的误区,并通过具体的代码示例来深入探讨数组和指针之间的关系及其差异。 #### 二、数组与指针的基本概念 1. **数组**: - 数组是一系列相同类型的数据项的集合。 ...

    C语言指针和数组******

    C语言指针和数组

    彻底理解指针,指针数组和数组指针,指针函数和函数指针

    ### 彻底理解指针,指针数组和数组指针,指针函数和函数指针 #### 一、基础知识 在计算机编程中,指针是一个非常重要的概念,尤其是在C/C++这样的语言中更是如此。简单来说,指针是一种变量,但它存储的不是普通的...

    第9章 指针和数组-4指针数组及其应用 - 用指针数组表示多个字符串1

    同时,指针数组还可以方便地进行字符串的排序、查找等操作,例如`SortString`函数就是一个例子,它接受一个字符串指针数组和数量,通过比较字符串并交换指针来对字符串进行排序。 总的来说,理解和熟练运用指针数组...

    语言详解指针和数组PPT课件.pptx

    语言详解指针和数组PPT课件.pptx

    专题四 - 指针和数组(上)

    根据提供的信息,我们可以深入探讨关于指针和数组的基础知识,特别是针对Java编程语言中的应用。虽然提供的部分内容更多地涉及了C语言的概念,但基于题目要求,我们主要关注于Java环境中这些概念的应用。 ### 指针...

    jidao-chap9 指针与数组(2017).rar_指针与数组教学

    本教学资源“jidao-chap9 指针与数组(2017).ppt”显然是一个关于这两部分知识的详细讲解,适合C语言初学者和进阶者学习。 首先,我们来深入理解一下指针。指针在C语言中扮演着特殊的角色,它是一个变量,但存储的...

Global site tag (gtag.js) - Google Analytics