当前位置:首页 » 编程语言 » c语言取数组首地址

c语言取数组首地址

发布时间: 2023-01-08 15:57:21

c语言中什么叫首地址

首地址就是该变量所占的存储区域中的第一个单元的地址。

比如定义一个数组,数组的第一个数的地址就是首地址

int a[10];

那么a[0]的地址就是首地址

int a[10][10];

则 a[0][0]的地址就是首地址

㈡ C语言中数组首地址和数组第一个元素的地址有什么区别呢

C语言中数组首地址和数组第一个元素的地址关系如下:

1、它们的地址值是相等的。

2、第1个元素的地址如果是p,则p+1就是第2个元素的地址。

3、数组的首地址如果是p,则p+1就跳过这个数数组而指向这个数组最后一个元素最后一个字节的下一字节。

(2)c语言取数组首地址扩展阅读:

数组的创建:在创建数组时,我们必须定义数组的类型和大小,数组的大小不能为0,数组中的元素类型都是相同的。

数组的初始化:在数组创建时,我们也要必须为数组初始化。

一个数组,可以保存一些数据,但是每一个数据不一定有用。或者说,有些时候的数组的数据不一定要输出,所以我们可以再来开一个相同的数组,来标记模拟是否输出数组中的某个元素。

㈢ C语言数组首地址相关问题!!

若a是一维数组名,我们知道*a就是a[0],就是*(arr+0)。因为a是数组的首地址,*a就是取首地址所指元素,就是数组的第一个元素。
同样的道理,a是二维数组名时,*a也是取a的第一个元素,但是此时a所指的元素是一个一维数组,所以,实际上a所指元素是一维数组的首地址。
二维数组a,a是数组地址,指向行;有一个等价关系 a[i]=*(a+i)
a[i]指向列,&a[i]又指向行。

你可以将*和&理解为相反的操作:
a指向行,*(a+i)指向列,*(*(a+i)+j)等价于a[i][j];
就按a[3][4]这个例子来看:3行4列数组a可以理解为a[0],a[1],a[2]这三个一维数组
a[0][0] a[0][1] a[0][2] a[0][3]//第一行a[0][]
a[1][0] a[1][1] a[1][2] a[1][3]//第二行a[1][]
a[2][0] a[2][1] a[2][2] a[2][3]//第三行a[2][]
(数组含有4个元素)构成的二维数组,*a就是a[0],而a[0]就是第0行的首地址,也就是第一个数组的首地址。*(a+i)就是a[i],就是第i行的首地址。

如果现在定义a是字符型数组,输出*a(也就是第一行的首地址)为0000,再输出*(a+1)就是0004,而不是0001,就可以说明a是指向一维数组的指针。

㈣ 如何用一个C语言函数返回一个数组的首地址

int * scanffile(FILE *fp,int n){
int i;
static int array[10]; //因为array是局部变量,随scanffile()函数的结束,该内存被释放,因此,你在之后得不到相应的数据了。 改成static静态变量就可以了!

for(i=0;i<n;i++){
fscanf(fp,"%d\t",&array[i]);

}
for(i=0;i<5;i++)
printf("%d\t",array[i]);
return array;
}

㈤ C语言如何获得数组首地址的指针

单维数组名就是首地址,多维数组名就是第1维的首地址,因此取首地址,可以把数组名赋给对应的指针变量,或取索引为0的首个元素地址赋给对应的指针变量。举例:
单维 int arr[10]; int * p =arr; 或 int * p =&arr[0];
二维 int arr[10][10]; int (*p)[10] =arr; 或int (*p)[10] = &arr[0];// 取第一维地址
int arr[10][10]; int * p= & arr[0][0]; // 取多维中的首个元素

㈥ C语言中怎么输出数组的首地址

%p
直接用16进制地址形式输出地址
%d
把地址直接用10进制形式输出
char
a[]
=
"hellow
C++";
int
b[]
=
{0x01,0x02,4,0x08,0};
如上数组如下输出都可以:
printf("十进制地址%d
十六进制地址%p",
a,
a);
printf("十进制地址%d
十六进制地址%p",
b,
b);
printf("十进制地址%d
十六进制地址%p",
&a[0],
&a[0]);
printf("十进制地址%d
十六进制地址%p",
&b[0],
&b[0]);

㈦ 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语言中怎么输出数组的首地址

%p 直接用16进制地址形式输出地址
%d 把地址直接用10进制形式输出
char a[] = "hellow C++";
int b[] = {0x01,0x02,4,0x08,0};
如上数组如下输出都可以:
printf("十进制地址%d 十六进制地址%p", a, a);
printf("十进制地址%d 十六进制地址%p", b, b);
printf("十进制地址%d 十六进制地址%p", &a[0], &a[0]);
printf("十进制地址%d 十六进制地址%p", &b[0], &b[0]);

㈨ 在C语言中怎么样得到二维数组的首地址哦

就这道题来说,虽然编译器给出了对p=a的警告,但是程序仍然可以正确的运行。因为你的程序中并没有对p进行二次解引用。详细来说,执行p=a时,由于两者类型不同,编译器将a转换成指向整型的指针,然后复制给p,所以p可以正确地指向二维数组的首元素a[0][0]。 最后我再解释一下一些表达式的意思: a,a[0],&a[0][0],p均表示该二维数组的首地址。 &a[1][0],a[1],a+1,p+3均表示该二维数组中第二维的首地址。 a[0][1],a[0]+1,p+1均表示该二维数组中的第二个元素的地址。 p+n表示第n+1个元素。 理解上只要知道a[i][j]是元素,a[i]和p是指向整型的常指针,a是指向指向整型的常指针的常指针,也是数组的首地址就可以了。

热点内容
java返回this 发布:2025-10-20 08:28:16 浏览:585
制作脚本网站 发布:2025-10-20 08:17:34 浏览:881
python中的init方法 发布:2025-10-20 08:17:33 浏览:574
图案密码什么意思 发布:2025-10-20 08:16:56 浏览:761
怎么清理微信视频缓存 发布:2025-10-20 08:12:37 浏览:677
c语言编译器怎么看执行过程 发布:2025-10-20 08:00:32 浏览:1005
邮箱如何填写发信服务器 发布:2025-10-20 07:45:27 浏览:250
shell脚本入门案例 发布:2025-10-20 07:44:45 浏览:108
怎么上传照片浏览上传 发布:2025-10-20 07:44:03 浏览:799
python股票数据获取 发布:2025-10-20 07:39:44 浏览:705