关闭

char *a 和char a[] 的区别(指针和数组的区别)

320人阅读 评论(0) 收藏 举报
分类:

1.两者在含义上的区别。

   数组对应着一块内存区域,而指针是指向一块内存区域。其地址和容量在生命期里不会改变,只有数组的内容可以改变;而指针却不同,它指向的内存区域的大小可以随时改变,当指针指向常量字符串时,它的内容是不可以被修改的,否则在运行时会报错。

如:




#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int main(void)
{
  
char*s1="123456789";
  
char*s2="123456";
  strncpy(s1,s2,
6);
  printf(
"%s %s\n",s1,s2);
  
return0;
}
复制代码

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

#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

int main(void)
{
  
char s1[10]="123456789";
   
char s2[10]="123456";
   strncpy(s1,s2,
6);
   printf(
"%s %s\n",s1,s2);
   
return0;
}
复制代码

 

在VC++ 6.0上可以编译运行通过,原因在于数组的内容是可以被修改的,这就充分体现了指针和数组的区别,并不是完全等价的。

2.计算内存容量的区别。

    用运算符sizeof可以计算出数组的容量(字节数),而用sizeof却无法计算指针所指内存的容量,用sizeof(p)得到的结果永远是4或者2(即指针变量所占内存单元的字节数,一般情况下指针变量占2个或4个字节的内存单元)。在进行参数传递时,数组会自动退化为同类型的指针

看下面这段代码和运行结果:

#include<stdio.h>
#include
<stdlib.h>
#include
<string.h>

void function(int a[])
{
printf(
"%d\n",sizeof(a));
}

int main(void)
{
int a[10]={1,2,3,4,5,6,7};
int*p=a;
printf(
"%d %d\n",sizeof(a),sizeof(p));
function(a);
return0;
}
复制代码

运行结果为:

40 4

4

数组不用做参数传递时,可以用sizeof取得大小;指针无论什么情况都是2或4

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

指针与数组的区别详解

指针是C语言的精华,它是一柄“双刃剑”,用的好与坏就看使用者的功力了。下面就一道面试题,看一下指针与数组的区别。   char *p1, *p2; char ch[12]; char **p...
  • qq_21792169
  • qq_21792169
  • 2016-03-13 21:18
  • 3110

c++中关于char数组/char*指针/string类型 之间的爱恨情

小渣渣一直被有关string和char[]以及char*的相关问题弄得痛不欲生,传参、返回值、函数调用等到底应该用哪种形式这真的是让小渣癫狂了,今天就好好稍微整理一下吧(欢迎补充与指正) 大多也是我从...
  • qq_19851167
  • qq_19851167
  • 2016-01-11 23:38
  • 1778

字符数组和字符串,char 和string定义的字符串的区别与遍历

字符数组:存在字符的数组字符串 :是使用最频繁的字符数组,是一个特殊的字符数组C++中并没有专门的字符串的类型,一个字符串实际上就是一个字符数组,与普通字符数组不同的是,字符串的结尾有一个字符\0,表...
  • mikedadong
  • mikedadong
  • 2016-11-05 20:13
  • 3511

char *a 和char a[] 的区别(指针和数组的区别)

在C/C++中,指针和数组在很多地方可以互换使用,这使得我们产生一种错觉,感觉数组和指针两者是完全等价的,事实上数组和指针是有很大的区别的。 1.两者在含义上的区别。    数组对应着一块...
  • qq_36506953
  • qq_36506953
  • 2016-11-29 09:59
  • 44

char *a 和char a[] 的区别(指针和数组的区别)

转载地址:http://www.cnblogs.com/dolphin0520/archive/2011/04/03/2004808.html 在C/C++中,指针和数组在很多地方可以互换使用,这使...
  • xc889078
  • xc889078
  • 2013-04-27 16:37
  • 404

char *a 和char a[] 的区别(指针和数组的区别)

如题,本来以为指针和数组没有什么区别,今天调试代码的时候写了下面的一段代码,编译通过,但是运行却会报错 char *a=“abcd”; a[0]='0'; 这段代码,乍一看没有任何问题,那时因为...
  • hjkhjk007
  • hjkhjk007
  • 2013-06-07 17:11
  • 549

char *a 和char a[] 的区别(指针和数组的区别)

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

char *a 和char a[] 的区别(指针和数组的区别)

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

char指针与数组的区别

学c和c++一般难的地方在指针,不过弄清楚程序的内存分配空间就不会那么吃力。 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ...
  • t6_17
  • t6_17
  • 2016-07-01 13:26
  • 198

详解char和varchar的区别

MySQL中的字符串有两个常用的类型:char和varchar,二者各有优势,下面我们来详细分析一下。 1、char(n)类型     char类型时定长的类型,即当定义的是char(10...
  • puqutogether
  • puqutogether
  • 2015-05-11 21:05
  • 1943
    个人资料
    • 访问:51559次
    • 积分:1363
    • 等级:
    • 排名:千里之外
    • 原创:78篇
    • 转载:52篇
    • 译文:0篇
    • 评论:3条
    文章分类