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

  • 相关阅读:
    scikit_learn 官方文档翻译(集成学习)
    机器学习之SVM与逻辑回归的联系和区别
    有序数组寻找中位数以及寻找K大元素
    有向图算法之拓扑排序
    机器学习之离散型特征处理--独热码(one_hot_encoding)
    计算广告学(2)--广告有效性模型
    机器学习实战--k-均值聚类
    SonarQube 扫描代码,SonarQube 进行代码质量检查
    Docker 搭建 Nexus3
    informix 安装 linux 客户端
  • 原文地址:https://www.cnblogs.com/xnwqc/p/4451604.html
Copyright © 2011-2022 走看看