• 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原来被定义为指针时,访问才是正确的,如果他原来被定义是数组,这儿却以指针来访问,毫无疑问,必将导致错误的结果。

  • 相关阅读:
    原创:【微信小程序】发送消息模板教程(后台以PHP示例)
    【微信小程序】详解wx:if elif else的用法(搭配view、block)
    原创:微信小程序+WEB使用JS实现注册【60s】倒计时功能
    微信小程序的POST和GET请求方式的header区别
    什么是单例模式
    Spring bean的生命周期
    对Spring Bean了解一二
    匿名内部类了解一二
    Eclipse中如何查看使用的JDK版本
    什么是语法糖
  • 原文地址:https://www.cnblogs.com/xnwqc/p/4451604.html
Copyright © 2020-2023  润新知