zoukankan      html  css  js  c++  java
  • 总结了一些指针易出错的常见问题(二)

    4.指针与数组

       一些常见的错误观点是数组和指针是完全可以互换的。尽管数组名字有时候可以当指针来使用,但是数组的名字不是指针。

      数组是能用索引访问的同质元素连续集合。(连续是指数组的元素在内存中是相邻的,中间不存在空隙同质是指元素是同一类型)

      指针在处理数组时很有用,既可以用指针指向已有的数组,也可以从堆上分配内存然后把这块内存当做一个数组使用。

      数组/指针表示法

      给数组地址加1实际加了4,也就是整数的长度。

    #include<iostream>
    using namespace std;
    int main()
    {
        int vector[5]={1,2,3,4,5};
        int *pv=vector;
        int value=4;
        for(int i=0;i<5;i++)
        {
            *pv++ *=value;
        }
        pv=vector;
        for (int i=0;i<5;i++)
        cout<<*(pv+i)<<endl;
     } 

      指针和数组的区别

    int vector[5]={1,2,3,4,5};
        int *pv=vector;

      vector[i]生成的代码和*(vector+i)生成的不一样,vector[i]表示法生成的机器码从位置vector开始,移动i个位置,取出内容。而*(vector+i)表示法生成的机器码则是从vector开始,在地址上增加i,然后取出这个地址中的内容。

      sizeof操作符对数组和同一个数组的指针操作也是不同的。

      sizeof(vector)=20;  //数组分配的字节数

      sizeof(pv)=4;           //指针长度

      如果从堆上分配内存并把地址赋给一个指针,那就肯定可以对指针使用数组下标并把这块内存当成一个数组。

    int *pv=(int*) malloc(5*sizeof(int));
        for(int i=0;i<5;i++)
            {
                pv[i]=i+1;
             }
    /////////////////////////////////////
      for(int i=0;i<5;i++)
    {
      *(pv+i)=i+1;
    }
  • 相关阅读:
    软件测试面试题及答案【史上最全】
    Loadrunner参数(摘)
    Linux系统的目录结构
    关于梦想(七)
    Mysql基于Linux上的安装
    走进MySQL
    关于梦想(六)
    Jmeter的实例应用
    十种社会中最真实的人际关系
    有些人走了就走了,该在的还在就好
  • 原文地址:https://www.cnblogs.com/iloverain/p/5582739.html
Copyright © 2011-2022 走看看