数组变量和指针的区别

作者&投稿:员支 (若有异议请与网页底部的电邮联系)
1. sizeof(数组)=数组的长度; sizeof(指向数组的指针)=指针大小4或8

#include <stdio.h>

int main(int argc, const char * argv[])
{

char s[] = "hello world!";
char *t = s;

printf("sizeof(s) is %li \n", sizeof(s));
printf("sizeof(t) is %li \n", sizeof(t));

return 0;
}
output:
sizeof(s) is 13
sizeof(t) is 8

2. char s[]中的&s等价于s, 同是取char s[]的地址;
而char *t = s中的&t 不等同于 t, 取得是t指针变量本身的地址

#include <stdio.h>

int main(int argc, const char * argv[])
{

char s[] = "hello world!";
char *t = s;

// &s == s; What is the address of the s array?
printf("&s is %p \n", &s);
// &t != t; What is the address of the t variable?
printf("&t is %p \n", &t);

return 0;
}
output:
&s is 0x7fff5fbffa2b
&t is 0x7fff5fbffa20

3. 声明指针, 内存会分配空间, 所以指针可以重新赋值; 而数组变量和数组元素公用地址, 所以如果重新赋值, 则产生编译错误.

#include <stdio.h>

int main(int argc, const char * argv[])
{

char s[] = "hello world!";
char *t = s;

s = t; // Error: Array type is not assignable

return 0;
}

数组变量和指针的区别~

数组变量就是常量指针,不知道你理解不理解const的意思
对于指针可以赋值,可以加减,数组不行。

数组是以某种类型为单位的连续的一段内存空间作为存储区域,其中存储相应的数据。其变量名代表数组起始空间地址,也就是首元素的地址。
指针是的本质是内存中某一字节的地址,其存储在变量名所对应的内存空间中。

之所以说数组的本质是指针,是因为在在具体实现上,数组是基于指针实现的,编译器只提供了数组首元素的地址,因此在访问时需要使用首地址+偏移量的形式,所谓的偏移量由下标决定。这样一来情况就变成了这样:
假设存在数组a[10],
当我们访问第一个元素是可以使用a[0],也可以使用*a,或者*(a+0),
当我们访问第二个元素时可以使用a[1],同样的,指针表示为*(a+1),

你可以看这段代码理解一下
#includeint main(void){int a[10]={0,1,2,3,4,5,6,7,8,9};printf("%d%d%d
",a[0],*a,*(a+0));printf("%d%d
",a[1],*(a+1));}

数组变量和指针的区别
答:针对一个数组来说,数组变量和指针,区别,就是写法不同而已。针对非数组的变量来说,数组变量就不可用了,指针,则可用。

数组变量和指针的区别
答:数组变量名本质上也是一个指向数组头部的指针。但是数组变量声明后就分配了内存空间。而指针并不会在声明时分配内存空间,而仅仅是一个声明而已。

数组变量和指针的区别
答:1. sizeof(数组)=数组的长度; sizeof(指向数组的指针)=指针大小4或8 include <stdio.h> int main(int argc, const char * argv[]){ char s[] = "hello world!";char *t = s;printf("sizeof(s) is %li \n", sizeof(s));printf("sizeof(t) is %li \n", sizeof(t));ret...

C语言中指针变量和数组变量的区别
答:指针p是一个变量,里面存的是一个地址,这个地址是a的地址。通过取值运算符*就可以用p访问a。指针变量使用起来灵活,一个指针变量只占四个字节,但是它可以访问类似结构体,链表,数组等多数据集合,而且在访问这些变量的时候是对内存直接访问,执行效率更高,知识需要慢慢积累,用得多了你就知道指针的...

指针变量和数组变量有什么不同?
答:不同点是:间接寻址是指用指针来访问存储区数据。指针以双字的形式存储其它存储区的地址。只能用V存储器、L存储器或者累加器寄存器(AC1、AC2、AC3)作为指针。要建立一个指针,必须以双字的形式,将需要间接寻址的存储器地址移动到指针中。指针也可以作为参数传递到子程序中.注意:AC0只能存入指针变量中...

数组变量和指针的区别
答:一、字符串指针变量的说明和使用 字符串指针变量的定义说明与指向字符变量的指针变量说明是相同的。只能按对指针变量的赋值不同来区别。对指向字符变量的指针变量应赋予该字符变量的地址。如: char c,*p=&c;表示p是一个指向字符变量c的指针变量。而: char *s="C Language";则表示s是一个指向字符...

数组和指针的区别
答:数组和指针的区别:1、指针变量用于保存数据的地址,数组用于直接保存数据(当然你可能见过,数组的每个元素是指针,不过,一组指针也是数据,它们各自的内容才是地址)。2、访问方式:指针是间接访问,首先取得指针的内容作为地址,再去该地址访问数据;数组是直接访问,数组名即是地址。3、指针通常用于动态...

指针与数组的区别和联系是什么?
答:指针和数组的对比 指针 保存数据的地址,任何存入指针变量p 的数据都会被当作地址来处理。p 本身的地址由编译器另外存储,存储在哪里,我们并不知间接访问数据,首先取得指针变量p 的内容,把它作为地址,然后从这个地址提取数据或向这个地址写入数据。指针可以以指针的形式访问*(p+i);也可以以下标的...

字符数组和字符指针变量的区别是啥呀?
答:指针也是一种变量,它指向内存中的某个位置,这个位置有没有有效的数据、能不能被安全访问甚至存不存在都是不考虑的,而str就是数组,不过使用str这个关键词的时候会被默认转化为指向首地址的指针,数组被创建的会被分配到空间,所以这个空间肯定是可以被安全访问的(也有些特殊情况不会默认转化),而方...

指针与数组的关系是什么啊
答:1、指针:系统为某一个变量开辟单元格,指针便指向此单元格的变量值。2、数组:系统为某一组数开辟一组单元格,数组首地址便是你定义的数组变量名。数组和指针的唯一区别是,不能改变数组名称指向的地址。对于数组来说,数组的首地址,也可以用指针来表示操作,如:int a[10];int *p,n;p = a;...