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. JavaScript自动生成博文目录导航

    转载于:JavaScript自动生成博文目录导航 我们在写博客的时候,如果博文里面有目录,会给人结构清晰.一种一目了然的感觉,看目录就知道这篇博文要讲解的内容,并且点击目录标题就可以跳转到 具体的内容 ...

  2. redis3.0配置文件详解

    redis.conf #redis.conf # Redis configuration file example. # ./redis-server /path/to/redis.conf #### ...

  3. [LeetCode] Reverse Linked List II 倒置链表之二

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  4. 时间格式转换—将后台返回的/Date(1448954018000)/格式转换为正常的时间格式

    用JS实现方法: function ChangeDateFormat(cellval) { )); < ? ) : date.getMonth() + ; ? " + date.get ...

  5. CentOS配置git和maven自动部署java

    #安装Git yum install git #测试是否成功 git -version #正确 #git version 1.7.1 #配置git config --global user.name ...

  6. Python学习--Python 环境搭建

    Python环境搭建 Python是跨平台的编程语言,可应用于Windows.Linux.Mac OS X.你可以通过终端窗口输入"python"命令来查看本地是否安装了Pytho ...

  7. javascript关闭页面

    var browserName=navigator.appName; if (browserName=="Netscape") { window.open('','_parent' ...

  8. RN中listView的每个item等高

    今天写ListView的每个Item的布局的时候发现,当文字太长时被截掉了不能完全显示,检查了很久发现没有设置固定高度都是可伸缩的为什么没有伸缩呢.看了很久才发现每个item是等高的,于是仔细检查才看 ...

  9. VR、AR、MR的区别

    VR.AR.MR定义: 什么是虚拟现实? 虚拟现实(Virtual Reality,简称VR,又译作灵境.幻真)是近年来出现的高新技术,也称灵境技术或人工环境.虚拟现实是利用电脑模拟产生一个三维空间的 ...

  10. JavaScript中---作用域

    作用域: 变量还有函数作用的范围. 浏览器的内核主要有两大功能,一个是渲染页面,另一个就是我们的JavaScript的解释器了. 我们主要来说说JavaScript解释器,在解析时是怎么样的工作原理. ...