zoukankan      html  css  js  c++  java
  • C语言中数组与指针

         数组是内存空间的一片连续的区域,用于存贮一组相同数据类型元素的集合。

         指针变量中存放的是变量的地址,通过指针取得地址,再通过地址提取数据。

         在大多是C语言书中,都有这样的说法,“数组和指针是相同的”。其实,数组与指针,只能在特定的情况下才是相同的,在大多书情况下,他们并不相同。

         C语言中每个表示变量的符号都代表一个地址,而每个变量的值就是该地址里所存储的内容。

         定义一个字符数组 char a[]="asdfghjkl";现在来访问第i个字符a[i],编译器符号表中具有一个符号,它代表的地址是40200,首先,取得 i 的值,然后把它与40200相加得到地址40200+i,再取地址40200+i 地址的值。内存中的分布如下:

    a s d f g

       

    40200    40201   40202    40203  40204                                                                                         

    Code

          定义一个指针 char *p="asdfghjkl";现在访问第 i 个字符,

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 char *p="asdfghjkl";
     4 int main()
     5 {
     6     int i=3;
     7     printf("&p=%x
    ",&p);
     8     printf("p=%x
    ",p);
     9     printf("&p[i]=%x
    ",&p[i]);
    10     system("pause");
    11     return 0;
    12     } 

     这两种方法都能取得一个字符,但这两种方法非常不一样的,第二种方法其实是指针访问方式和数组访问方式的结合。先在编译器符号表中找到一个符号p,先取得该符号所代表地址里的内容,以该内容作为地址并与偏移量相加,得到字符的地址,取该地址内容便得到字符。

         如果把符号p声明为一个指针 extern char *p;则无论它原来的定义是数组还是指针,都会按第二种方式来访问。但是,只有当符号p原来被定义为指针时,访问才是正确的,如果他原来被定义是数组,这儿却以指针来访问,毫无疑问,必将导致错误的结果。

  • 相关阅读:
    RabbitMQ官方文档翻译之Simple(一)
    rabbitMq集成Spring后,消费者设置手动ack,并且在业务上控制是否ack
    RabbitMQ消息队列知识点归纳
    理解Java中HashMap的工作原理
    mybatis 主键回显
    quart任务调度框架实战
    springmvc常用注解标签详解
    Java程序员玩Linux学操作系统
    在网页中发起QQ临时对话的方法
    软件测试技术学习总结
  • 原文地址:https://www.cnblogs.com/xnwqc/p/4451604.html
Copyright © 2011-2022 走看看