1、数组长度相关:

strlen(from <string.h>)只是针对字符数组才有的,他不包含\0的长度。无法对其他类型求长度。sizeof()则可以对\0发起作用。记住(a.length()这不是c++语言)

获取数组长度方法:

方法1:

sizeof(array) / sizeof(array[0]);

方法2:

在C语言中习惯上在使用时都把它定义成一个宏:

#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}

而在C++中则可以使用模板技术定义一个函数,比如:

方法3:

template <class T>

int getArrayLen(T& array)

{

return (sizeof(array) / sizeof(array[0]));

}

【C语言】

#include <stdio.h>

#include <stdlib.h>

#define GET_ARRAY_LEN(array,len) {len = (sizeof(array) / sizeof(array[0]));}

//定义一个带参数的宏,将数组长度存储在变量len中

int main()

{

  char a[] = {'1','2','3','4'};

  int len;

   GET_ARRAY_LEN(a,len)

  //调用预定义的宏,取得数组a的长度,并将其存储在变量len中

  printf("%d\n",len); // 输出为4

  system("pause");

  return 0;

}

【C++】

#include <iostream>

using namespace std;

template <class T>

int getArrayLen(T& array) //使用模板定义一个函数getArrayLen,该函数将返回数组array的长度

{

  return (sizeof(array) / sizeof(array[0]));

}

int main()

{

  char a[] = {'1','2','3'};

  cout << getArrayLen(a) << endl;//输出为3

  return 0;

}

2、数组的输出相关:

#include<iostream>
using namespace std;
int main(){
  int a[]={1,2,3,4,5,6,7,8};
  cout<<a<<endl; //可以输出整个数组,和之前的不一样,之前的只是把a当做第一个地址输出
  cout<<&a[0]<<endl;//第一个元素首地址
  cout<<&a<<endl;//数组的地址和第一个元素的地址一样

cout<<a+1<<endl;//结果为 下一个元素的地址 *(a+1)也就是下一个元素

cout<<&a+1<<endl;//获取数组名的地址在+1,这个偏移是整个数组的大小

  cout<<&a[0]+1<<endl;// 不一样,还是看作相隔一个元素
  return 0;
}

分析:

对于:

  int a[5]={1,2,3,4,5};

  int *ptr=(int *)(&a+1);
  printf("%d,%d",*(a+1),*(ptr-1));

原因如下:
  &a是数组指针,其类型为 int (*)[5]; 而指针加 1要根据指针类型加上一定的值, 不同类型的指针+1之后增加的大小不同,a是长度为 5的 int数组指针,所以要加 5*sizeof(int) 、所以 ptr实际是 a[5] ,但是 prt与(&a+1)类型是不一样的(这点很重要) ,所以 prt-1只会减去 sizeof(int*) a、&a的地址是一样的,
但意思不一样,a是数组首地址,也就是 a[0]的地址,&a是对象(数组)首地址,a+1是数组下一元素的地址,即 a[1],&a+1是下一个对象的地址,即 a[5] 。

C++中有关数组的相关问题的更多相关文章

  1. Shell中的数组及其相关操作

    http://blog.csdn.net/jerry_1126/article/details/52027539 Shell中数据类型不多,比如说字符串,数字类型,数组.数组是其中比较重要的一种,其重 ...

  2. MongoDB中数组类型相关的操作

    概述 在MongoDB的模式中,我们经常将一些数据存储到数组类型中,即我们常见的嵌套模式设计的一种实现方式.数组的这种设计实现方式在关系数据库中是没有或者说不常见的.所以,通过本文我们来梳理一下Mon ...

  3. JavaScript jQuery 中定义数组与操作及jquery数组操作

    首先给大家介绍javascript jquery中定义数组与操作的相关知识,具体内容如下所示: 1.认识数组 数组就是某类数据的集合,数据类型可以是整型.字符串.甚至是对象Javascript不支持多 ...

  4. Javascript中判断数组的正确姿势

    在 Javascript 中,如何判断一个变量是否是数组? 最好的方式是用 ES5 提供的 Array.isArray() 方法(毕竟原生的才是最屌的): var a = [0, 1, 2]; con ...

  5. C#中的数组,多维数组和交错数组

    想研究一些面向对象的东西,也许是代码写得还不够多.感觉还不好,看那些教程,不是嫌太水就是太难看不懂.心情很是落寞 不过再怎样也要坚持每天发一篇博客. 这篇来说一下C#中的数组,多维数组,交错数组的一些 ...

  6. php对二维数组进行相关操作(排序、转换、去空白等)

    php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04   这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...

  7. javascript中的数组扩展(一)

     javascript中的数组扩展(一) 随着学习的深入,发现需要学习的关于数组的内容也越来越多,后面将会慢慢归纳,有的是对前面的强化,有些则是关于前面的补充. 一.数组的本质    数组是按照次序排 ...

  8. PHP中的数组(二)常用数组处理函数

    数组的相关处理函数    一.数组键/值操作有关的函数        1.array_values()   无论是关联的还是索引的返回的都是索引数组 <?php $lamp=array(&quo ...

  9. 【PHP】最详细PHP从入门到精通(三)——PHP中的数组

     PHP从入门到精通 之PHP中的数组 各位开发者朋友大家好,链接上次更新,我们PHP的学习也更深了一层,本次博主给大家带来PHP数组的数组实例详解的相关资料.数组分为数组数值数值,关联数组,多维数组 ...

随机推荐

  1. jpa+springdata

    学习爱酷学习网尚硅谷springdata笔记: 1.在 Spring 配置文件 <?xml version="1.0" encoding="UTF-8"? ...

  2. [LeetCode] Number of Segments in a String 字符串中的分段数量

    Count the number of segments in a string, where a segment is defined to be a contiguous sequence of ...

  3. [LeetCode] Rectangle Area 矩形面积

    Find the total area covered by two rectilinear rectangles in a2D plane. Each rectangle is defined by ...

  4. CSS布局

    1流动模型 先来说一说流动模型,流动(Flow)是默认的网页布局模式.也就是说网页在默认状态下的 HTML 网页元素都是根据流动模型来分布网页内容的. 流动布局模型具有2个比较典型的特征: 第一点,块 ...

  5. [转]HQL中的子查询

    原文地址:http://blog.csdn.net/xb12369/article/details/8638683 子查询:   子查询是SQL语句中非常重要的功能特性,它可以在SQL语句中利用另外一 ...

  6. sql server生成递归日期

    WITH Date AS ( SELECT CAST('2008-08-01' AS DATETIME) da UNION ALL FROM Date WHERE da < '2008-08-2 ...

  7. react 表单

    import React ,{PropTypes}from 'react'; import { render } from 'react-dom'; const styles={ mb10:{ mar ...

  8. ASP.NET MVC 应用,站点发布到本地IIS

    材料准备 visual studio 2013 , iis 7 具体步骤 1.以管理员身份启动visual studio 2.新建项目 web app 或者站点 3.编译项目 4.右击项目选择publ ...

  9. Codeforces Round #388 (Div. 2)

      # Name     A Bachgold Problem standard input/output 1 s, 256 MB    x6036 B Parallelogram is Back s ...

  10. 团队作业week16

    0.新成员如何管理和使用这个工程? 对于后端而言,因为我们也是初次接触Django,因此从我们学习到程序编写过程中用到的各种知识都有学习笔记,比如Django的详细使用,Django数据库的使用.跨域 ...