当前位置:首页 » 编程语言 » c语言数组名和指针名
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言数组名和指针名

发布时间: 2022-07-22 06:00:17

1. 求助c语言关于数组名和指针的问题

如图,a是数组第一个元素的地址值,一个指针,一般占用4个字节内存大小,p也是个指针,也占用4个字节,两个都是变量,因为赋值,两个存放的值都一样了,但是本身不一样,就想两个纸条写的都是同一个地址。

2. c语言中怎样理解数组和指针

数组和指针的关系

一、数组的数组名其实可以看作一个指针。看下例:

例1:

int array[10]={0,1,2,3,4,5,6,7,8,9},value;

value=array[0];//也可写成:value=*array;

value=array[3];//也可写成:value=*(array+3);

value=array[4];//也可写成:value=*(array+4);

上例中,一般而言数组名array代表数组本身,类型是int [10],但如果把array看做指针的话,它指向数组的第0个单元,类型是int *,所指向的类型是数组单元的类型即int。因此*array等于0就一点也不奇怪了。同理,array+3是一个指向数组第3个单元的指针,所以*(array+3)等于3。其它依此类推。

二、指针数组的定义及使用

例2:

char *str[3]={ //注意指针数组的定义及初始化格式

"Hello,this is a sample!",

"Hi,good morning.",

"Hello world"

};

char s[80];

strcpy(s,str[0]);//也可写成strcpy(s,*str);

strcpy(s,str[1]);//也可写成strcpy(s,*(str+1));

strcpy(s,str[2]);//也可写成strcpy(s,*(str+2));

上例中,str是一个三单元的数组,该数组的每个单元都是一个指针,这些指针各指向一个字符串。把指针数组名str当作一个指针的话,它指向数组的第0号单元,它的类型是char**,它指向的类型是char *。
*str也是一个指针,它的类型是char*,它所指向的类型是char,它指向的地址是字符串"Hello,this is a sample!"的第一个字符的地址,即'H'的地址。 str+1也是一个指针,它指向数组的第1号单元,它的类型是char**,它指向的类型是char *。

*(str+1)也是一个指针,它的类型是char*,它所指向的类型是char,它指向"Hi,good morning."的第一个字符'H',等等。

三、数组名小结:
声明了一个数组TYPE array[n],则数组名称array就有了两重含义:第一,它代表整个数组,它的类型是TYPE [n];第二,它是一个指针,该指针的类型是TYPE*,该指针指向的类型是TYPE,也就是数组单元的类型,该指针指向的内存区就是数组第0号单元,该指针自己占有单独的内存区,注意它和数组第0号单元占据的内存区是不同的。该指针的值是不能修改的,即类似array++的表达式是错误的。

在不同的表达式中数组名array可以扮演不同的角色。

(1)在表达式sizeof(array)中,数组名array代表数组本身,故这时sizeof函数测出的是整个数组的大小。

(2)在表达式*array中,array扮演的是指针,因此这个表达式的结果就是数组第0号单元的值。sizeof(*array)测出的是数组单元的大小。

(3)表达式array+n(其中n=0,1,2,....。)中,array扮演的是指针,故array+n的结果是一个指针,它的类型是TYPE*,它指向的类型是TYPE,它指向数组第n号单元。故sizeof(array+n)测出的是指针类型的大小。

四、数组指针的定义及使用:

例3:

int array[10];

int (*ptr)[10]; //数组指针ptr,指向一个数组int[10]

ptr=&array;

上例中ptr是一个指针,它的类型是int (*)[10],他指向的类型是int [10],我们用整个数组的首地址来初始化它。在语句ptr=&array中,array代表数组本身。

五、对指针和数组执行sizeof操作的结果:
sizeof(指针名称)测出的究竟是指针自身类型的大小呢还是指针所指向的类型的大小?答案是前者。例如:

int (*ptr)[10];

则在32位程序中,有:

sizeof(int(*)[10])==4

sizeof(int [10])==40

sizeof(ptr)==4

实际上,sizeof(对象)测出的都是对象自身的类型的大小,而不是别的什么类型的大小。

3. 分析C语言中数组名和指针的区别

数组名指向数组的首地址,相当于地址常量,只能做右值。
指针就是指向固定大小内存的地址,又分指针变量和指针常量。
所以数组名也属于指针。

4. C语言中数组名和指针的区别 及 sizeof用法

指针需要给一个明确的指向才能使用,否则就是一个野指针。
数组名就是一个有明确指向的指针。
数组名有点类似于const指针。比如:
int a[10]={0};
a就类似于const int * p = a;
另外,指针的sizeof就是4字节(视系统而定,一般4字节);数组名的sizeof就是这个数组的整个size。
比如:sizeof(p) = 4; sizeof(a) = 10*sizeof(int);

5. c语言中的数组和指针的区别

C语言中,数组的名称等价于数组的首地址,
当然可以利用指针开辟动态空间,使用方式与数组在形式上相同的,
但是他们有一个本质的区别,数组名相当于一个地址常数,而指针是一个以地址为内容的变量。
指针与数组的关系可以参考下面的网页:
http://..com/question/341950481.html

6. c语言中数组和指针的区别与联系

数组是用指针方式实现的,但数组值是一个常量,即不能改变数组的首地址,而指针是一个变量,可以改变它的值;如:数组 a和指针p,p=a+1;是合法的,但a=a+1;是不合法的。

7. c语言数组名与指针的关系

数组名是不可移动的指针,指针是移动的数组名。

8. c语言中数组名和指针变量的区别

数组和指针的区别:
数组名确实表示指向数组首地址的指针,但这个指针很特别,它的值(指针的值指的是指针所指的地址)不能被改写,能改写的仅仅是其指向的内容,换句话说,数组名只能指向数组的首地址,如果有数组char
a[];那么如果出现a
=
a+1;这是编译都通不过的错误。而对于一个普通的指针是可以的,再比如有数组char
a[];那么再定义一个char
*p
=
a;然后再用p
=
p+1是合法的,这表示让指针p指向&a[1]。
它们的第二个区别是:每当用到数组名这个指针的时候,系统都会传入数组的信息,而普通的指针只是一个4字节的整数,例如:
char a[5];
char *p = a;//指针a和指针p都指向数组a的首地址
cout << sizeof (a) << "##" << sizeof (p) << endl;这时的运行结果是“5##4”

9. C语言中数组名和指针的区别

数组在当作参数传递时,可以当作指针;当然,参数传递相当于赋值操作,所以用指针来接受数组的值也是可以的。

除此之外,指针就是指针,数组就是数组,一点也不一样,例如
1,数组名不能作为左值,即不能被赋值,也不能进行++ --操作
2,sizeof 数组名 和 sizeof 指针 不同