当前位置:首页 » 编程语言 » c语言中如何表示某数组元素地址
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

c语言中如何表示某数组元素地址

发布时间: 2022-12-22 22:03:28

‘壹’ c语言中如何用指针运算符来表示一个二维数组的元素及地址

二维指针,就是说第一维是指针,第二维还是指针;
拿*(*(a+i)+j)来说:a是数组的首地址吧,然后+i,就是说a地址向后偏移i位。就是a+i的地址了,注意,这里a+i只是地址,用*符号取出该地址的数据,就是*(a+i),这里*(a+i)就是第一维指针,它指的是地址,不是数据。
而且后面的*(a+i)+j就是说以*(a+i)为首地址,偏移j位,然后使用*取内容,这里就是第二维了,取到的数据就是实际数据了

‘贰’ C语言数组的地址怎么看

&buf的指针类型的类型是int (*)[100]

所以&buf+1即buff+100,即&buff[100],即数组最后一个元素占用内存后的地址位

‘叁’ c语言中元素地址是什么

是计算机为每一个元素都开辟了内存空间,其中各个元素有自己的内存地址,要访问元素就要知道地址

‘肆’ C语言 数组元素 地址

a[2][3] = {{2,4,6},{8,10,12}};
A:*a为第一行数组首地址,+1第一行第2个元素的地址。
B:a[1]=*(a+1),+2后进行*操作即获得第2行第3个元素。
C:a[1]=*(a+1), +3后超出数组维数,是一个垃圾内容的地址。
D:忽略

‘伍’ C语言数组地址问题

解释如下:

&a,*a,a,a[0]——都表示的是数组第0行第0个元素的地址;

*a[0]——这个特殊,表示第0行第0个元素的地址的地址;

a[2],&a[2]——都表示第2行第0个元素的地址;

&a[2][2]——表示第2行第2个元素的地址;

详见图片,我已经把数组中主要元素的地址和值都打印出来了,数组中对应的每个元素的地址写出来了,对照的找下对应元素的位置,应该能理解&a,*a,a,a[0],*a[0],a[2],&a[2],&a[2][2]是什么意思了

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

intmain()
{
inta[3][4]={
{1,2,3,4},
{5,6,7,8},
{9,10,11,12},
};

printf("&a十六进制地址是%p,十进制是%d ",&a,&a);//数组名,a[3][4]
printf("*a十六进制地址是%p,十进制是%d ",*a,*a);
printf("a十六进制地址是%p,十进制是%d ",a,a);
printf("a[0]十六进制地址是%p,十进制是%d ",a[0],a[0]);
printf("*a[0]十六进制地址是%p,十进制是%d ",*a[0],*a[0]);
printf("a[2]十六进制地址是%p,十进制是%d ",a[2],a[2]);
printf("&a[2]十六进制地址是%p,十进制是%d ",&a[2],&a[2]);
printf("&a[2][2]十六进制地址是%p,十进制是%d ",&a[2][2],&a[2][2]);

printf("数组a[3][4]首元素a[0][0]的地址是%p,首元素a[0][0]的值=:%d ",&a[0][0],a[0][0]);
printf("数组a[3][4]首元素a[2][0]的地址是%p,首元素a[2][0]的值=:%d ",&a[2][0],a[2][0]);
printf("数组a[3][4]首元素a[2][2]的地址是%p,首元素a[2][2]的值=:%d ",&a[2][2],a[2][2]);
printf("一个int整型变量占的字节是:%d",sizeof(int));
return0;
}

‘陆’ 数组元素地址的表达方式,c语言问题求解…!!

A和B一看就是错的,因为计算机本身计数是从0开始,就是说,如果有三个元素在数组中,那么它们的编号就是0、1、2,而不是1、2、3(由工作原理决定的)。
剩下的C和D:
C:t[1]表示的是t这个数组的第2个元素的地址(也同时代表这个地址所存储的值)。
D:*t[2]表示的是t这个数组的第3个元素的地址的指针形式。

‘柒’ C语言中数组地址的表示方法

数组变量就是它的首地址啊

‘捌’ C语言中如何指定数组的首地址在指定的地址

据我所知,创建数组需要2个参数,1是地址,2是分配空间。空间分配是不能重复的,也就是说创建2个数组,这两个数组是不可能重合的,为了防止这种事情出现,所以不能指定地址。而是编译器自动分配,不能人为。
但是可以省去分配空间这个步骤,而是只创建地址,这就是指针的概念。比如int a[12],你若是想创建另一个代替a[12],可以int *p=a;这样,p的值就是a数组的首地址了。int *p =(int*)0x80000;意思就是p[0]的地址是0x80000,创建的时候要确定(int*)0x80000已经分配过了,可以使用了,不然就相当于野指针,容易出错。

‘玖’ C语言:数组的值是地址

不对。
数组名是数组的首地址,就是数组中第一个元素的地址,是常量。常量是不能出现在赋值号=左边作为左值的。楼上的都没有解释清楚,说数组名就是指针是错误的,指针是变量,是用来存储变量地址值的变量,而数组名是常量。一般情况下声明一个数组,比如char a[10];之后,数组名a都是数组的首地址,是一个地址常量。但是在函数声明的形参列表中除外。比如:int foo(char a[10]);在这种情况下这样的声明与int foo(char a[]);int foo(char * a);是等价的,就是说这种情况下,就算你写的是数组的形式,编译器实际处理的时候也当指针来处理(注意指针是变量,形参也是变量,二者刚好对应)。所以在函数foo内部,你对a进行++, --, +=,=之类的带赋值的操作是完全合法的,因为此时a就是一个指针,不是数组名,当你往函数foo里面传入一个已经事先声明的数组的首地址时候,指针a里面的值就是你这个已经声明的数组的首地址,这样你在foo里面就可以对你那个数组进行操作,正是因为C有这个传地址的优点,所以省略了很多不必要的拷贝工作,试想如果没有这个传地址,你传一个有几万个元素的数组进去,那拷贝工作是相当可观的。这样,你该明白了int main(int argc, char ** argv);里面为什么可以对argv进行++操作了,既然“main函数的第二个形参是一个指向字符串的指针数组”,argv出现在函数声明中,所以它实际上是一个指针,它并不是“一个指向字符串的指针数组”,而是一个可以获取“一个指向字符串的指针数组”的首地址值的变量。

‘拾’ C语言多维数组地址计算请举例说明

一、多维数组地址的表示方法

设有整型二维数组a[3][4]如下:

0 1 2 3
4 5 6 7
8 9 10 11

设数组a的首地址为1000,各下标变量的首地址及其值如图所示。
C语言允许把一个二维数组分解为多个一维数组来处理。因此数组a可分解为三个一维数组,即a[0],a[1],a[2]。每一个一维数组又含有四个元素。例如a[0]数组,含有a[0][0],a[0][1],a[0][2],a[0][3]四个元素。 数组及数组元素的地址表示如下:a是二维数组名,也是二维数组0行的首地址,等于1000。a[0]是第一个一维数组的数组名和首地址,因此也为1000。*(a+0)或*a是与a [0]等效的, 它表示一维数组a[0]0 号元素的首地址。也为1000。&a[0][0]是二维数组a的0行0列元素首地址,同样是1000。因此,a,a[0],*(a+0),*a,&a [0][0]是相等的。同理,a+1是二维数组1行的首地址,等于1008。a[1]是第二个一维数组的数组名和首地址,因此也为1008。 &a[1][0]是二维数组a的1行0列元素地址,也是1008。因此a+1,a[1],*(a+1),&a[1][0]是等同的。由此可得出:a+i,a[i],*(a+i),&a[i][0]是等同的。此外,&a[i]和a[i]也是等同的。因为在二维数组中不能把&a[i]理解为元素a[i]的地址,不存在元素a[i]。

C语言规定,它是一种地址计算方法,表示数组a第i行首地址。由此,我们得出:a[i],&a[i],*(a+i)和a+i也都是等同的。另外,a[0]也可以看成是a[0]+0是一维数组a[0]的0号元素的首地址,而a[0]+1则是a[0]的1号元素首地址,由此可得出a[i]+j则是一维数组a[i]的j号元素首地址,它等于&a[i][j]。由a [i]=*(a+i)得a[i]+j=*(a+i)+j,由于*(a+i)+j是二维数组a的i行j列元素的首地址。该元素的值等于*(*(a+i)+ j)。

试一下以下程序段

#define PF "%d,%d,%d,%d,%d,\n"
main(){
static int a[3][4]={0,1,2,3,4,5,6,7,8,9,10,11};
printf(PF,a,*a,a[0],&a[0],&a[0][0]);
printf(PF,a+1,*(a+1),a[1],&a[1],&a[1][0]);
printf(PF,a+2,*(a+2),a[2],&a[2],&a[2][0]);
printf("%d,%d\n",a[1]+1,*(a+1)+1);
printf("%d,%d\n",*(a[1]+1),*(*(a+1)+1));
}