当前位置:  编程技术>c/c++/嵌入式

数组和指针的区别深入剖析

    来源: 互联网  发布时间:2014-10-11

    本文导语:  在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。 1.两者在含义上的区别。 数组对应着一块内存区域,而指针是指向一块内...

在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。
1.两者在含义上的区别。
数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,而且当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。
如:
代码如下:

#include
#include
#include
int main(void)
{
  char*s1="123456789";
  char*s2="123456";
  strncpy(s1,s2,6);
  printf("%s %sn",s1,s2);
  return0;
}

在编译时不会报错,但是在运行时会报错,原因在于企图改变s1的内容,由于s1,s2指向的是常量字符串,其内容是不可修改的,因此在运行时不会通过。而下面这个程序是可以运行通过的:
代码如下:

#include
#include
#include
int main(void)
{
  char s1[10]="123456789";
   char s2[10]="123456";
   strncpy(s1,s2,6);
   printf("%s %sn",s1,s2);
   return0;
}

在VC++ 6.0上可以编译运行通过,原因在于数组的内容是可以被修改的,这就充分体现了指针和数组的区别,并不是完全等价的。
2.计算内存容量的区别。
用运算符sizeof可以计算出数组的容量(字节数),而用sizeof却无法计算指针所指内存的容量,用sizeof(p)得到的结果永远是4或者2(即指针变量所占内存单元的字节数,一般情况下指针变量占2个或4个字节的内存单元)。在进行参数传递时,数组会自动退化为同类型的指针。
看下面这段代码和运行结果:
代码如下:

#include
#include
#include
void function(int a[])
{
printf("%dn",sizeof(a));
}
int main(void)
{
int a[10]={1,2,3,4,5,6,7};
int*p=a;
printf("%d %dn",sizeof(a),sizeof(p));
function(a);
return0;
}

    
 
 

您可能感兴趣的文章:

  • 深入理解数组指针与指针数组的区别
  • C++指针数组、数组指针、数组名及二维数组技巧汇总
  • 数组指针、指针数组以及二位数组的深入解析
  • 请问如何在linux (redhat)下传递一维数组指针?
  • 求教,数组名和指针的区别
  • 大家讨论一下指针数组的问题!
  • 深入解析C++中的指针数组与指向指针的指针
  • 指针数组的创建及初始化问题
  • 能不能给指针数组动态分配内存
  • 数组实参传递给指针形参的问题
  • Fedora13_64位系统下地址赋给指针数组出错
  • 关于函数回传字符数组指针问题
  • 想建立一个指向结构体的指针数组,但编译不过,望高手指点!
  • C++中用指向数组的指针作函数参数
  • 指针和数组的区别
  • C语言数组指针的小例子
  • C语言安全之数组长度与指针实例解析
  • 数组字符串和指针字符串已经变量的生命期 问题
  • 解析sizeof, strlen, 指针以及数组作为函数参数的应用
  • 字符指针数组参数传递问题?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ Strings(字符串) 成员 data():返回内容的字符数组形式
  • c#基础之数组与接口使用示例(遍历数组 二维数组)
  • C++ Strings(字符串) 成员 copy():将内容复制为一个字符数组
  • 如何将一个数组重新组成一个新的数组?
  • C++ Strings(字符串) 成员 c_str():将字符串以C字符数组的形式返回
  • php定义数组和使用示例(php数组的定义方法)
  • c++类对象数组初始化方式
  • php数组函数之array_combine() 数组合并函数
  • 判断php数组维度(php数组长度)的方法
  • php数组函数之array_count_values() 统计数组中所有值出现的次数
  • 请问怎么对一个数组排序,数组的内容是字符串,可能是单个也可能是多个?
  • 在我的java程序中,我从数据库中得到一批数据,不能确定是多少个,我要把它保存到我的java数组中,可是怎样才能向C++中的数组一样可以自由分配空间,在java中我必需预先指定大小,不会一定要用java中的那个可改变数组大小的类吧?
  • 一个String类型的Vector向量数组如何转换成一个String类型数组(请给代码)?
  • php数组函数之array_unique() 去除数组中重复的元素值
  • 将数组中指定数量的元素移动数组后面的实现代码
  • C++中关于[]静态数组和new分配的动态数组的区别分析
  • php判断一个数组是否为另一个数组子集的方法
  • 将二维数组转为一维数组的2种方法
  • 文件描述符集fd_set * readfds;书上这样描述数组元素的每一位对应一个文件描述符,第一个元素代表文件描述符0到31,数组第二个元素代表文
  • php数组函数之array_key_exists() 查找数组键名是否存在
  • c++将数组名作为函数参数对数组元素进行相应的运算


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3