2 weixin 40164706 weixin_40164706 于 2017.09.11 22:01 提问

数组名是首地址,那能用*加数组名表示首元素的值么

数组名是首地址,那能用*加数组名表示首元素的值么?定义一个结构体数组st[3]后,能否用st->num这种格式合法么?

2个回答

TA_tan
TA_tan   2017.09.12 09:04
已采纳

#include
#include

struct st{
char c;
int num;
};

int main(int argc,char ** argv)
{
struct st s[4] = {0};
//initial s[0]
s[0].c = 'a';
s[0].num = 99;

printf("1.The first st :c is %c,num is  %d.\n",s->c,s->num);
//
printf("2.The first st :c is %c,num is  %d.\n",s[0].c,s[0].num);
//
printf("3.The first st :c is %c,num is  %d.\n",(&s[0])->c,(&s[0])->num);
//
printf("4.The first st :c is %c,num is  %d.\n",(*s).c,(*s).num);
return 0;

}

输出:
1.The first st :c is a,num is 99.
2.The first st :c is a,num is 99.
3.The first st :c is a,num is 99.
4.The first st :c is a,num is 99.

其实,楼主已经知道 数组名是首地址就是很好理解了。首地址去内容就是s[0],s->num,就是第一个元素的指针指向它其中的元素。

qq_38204686
qq_38204686   2017.09.12 09:02

能用*加数组名表示首元素的值
能用st->num这种格式
都是可以的

你可以用编译器自己测试一下

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
数组名、取数组首地址的区别
1 int a[10]; 2 int *p = a; 3 int (*q)[10] = &a; 第二个为指向数组的指针. a只是a[0]的地址,a+1就是a[1]的地址了,&a是整个a[10]的首地址,是以整个数组为角度来看,虽然它与a[0]的值相同,但是&a+1就已经增加了10个int类型的字节的长度了.   1 #include 2 3 int a[2] =
数组名和数组首地址
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中)。所谓数组的指针是指数组的起始地址,数组元素的指针数组元素的地址。     这种指针变量的定义与以前介绍的指向变量的指针变量相同。应当注意,如果数组为int型,则指针变量亦应指向int型。
C++,二维数组与指针,二维数组名是不是首地址?
答: 是首地址,是数组的首地址,虽然值等于第一个元素的地址,但是不代表元素的地址. 1. 数组名都是地址常量,都是首地址,可以直接付给指针,但是一维数组和二维数组名 赋予指针时有点不一样. 2.数组名不是指针,它仅仅是个 地址常量 3. 一维数组的数组名 直接付给指针, 如 int a[3]; int *p=a; 4. 二维数组名 直接赋给指针 就错了... 如 int a[3][4];
C语言——数组名、取数组首地址的区别(一)
目录: 1. 开篇 2. 论数组名array、&array的区别 3. array、&array的区别表现在什么地方 4. 讨论 5. 参考 1.开篇 很多博客和贴吧都有讨论这个话题,各有自己的表述方式,今天在他们的基础上我将继续试着以我自己理解的方式总结一下,欢迎大家的审阅和指评。2.论数组名array、&array的区别——省政府和市政府的区别 例如: int arr
数组名为什么代表首地址
1.对于一个数组,比如int a[4],它的数组名a代表首地址,这是为什么呢,看了很多解释,感觉都很扯淡,其实如果我们从汇编的角度来看数组,就非常简单了  数组的0.1.2.3都是偏移地址,而a 就是首地址,这跟汇编的寻址方式有 异曲同工的地方,就是这么简单,a代表一个首地址,然后加上偏移量就可以 定位每个数组的地址,
二维数组名与地址的对应
已知int a[3][4];则下列能表示a[1][2]元素值的是? 在多维数组中,数组名是第一个数组的地址. 注意这里a不是第一个元素的地址,而是第一个维数组(即a[0],a[0]是一个4元素的数组)的地址,a[0][0]才是表示的一维数组第一个元素的地址. 数组名 + 1表示向下移一层. 本题中,a是一个三行四列的数组 *(a+1)表示第二行的首地址,和a[1]一样。 *(a+1)+
c语言中数组名代表数组首地址,它的值在运行期间可以改变吗?
转载:http://blog.chinaunix.net/uid-12779255-id-2916004.html c语言中数组名代表数组首地址,它的值在运行期间可以改变吗? c语言中数组名代表数组首地址,它的值在运行期间是固定不变的,但是在main函数的参数中对指针数组名却可以出现类似于argv++的操作(谭浩强老师的c程序设计中有这样的程序),这不是前后矛盾了吗?盼
C语言中二维数组名与数组地址、首行地址、首行首元素地址关系与区别详解(初学者必须掌握)
C语言作为很多大学理工科都会学习的语言,作为一种编程入门语言。但是相对于其他高级编程语言来说相对是比较难,尤其是指针,不知道有多少莘莘学子都是因为它,从C语言入门到放弃。想当年,笔者在大一学习C语言时也是被折磨的不轻,那个时候弄冒泡排序都不会。可能是那个时候逻辑思维不行吧,感觉工作后思维能力变强了,难道是被逼的,不知道你们有没有这种感觉。不扯了!进入主题,今天来探讨二维数组名到时是个啥?与数组地址...
数组名就是数组首地址
#include<stdio.h>#include<string.h>void main(){ char a[20]={"abcdefg"}; char b[20]={"higklmn"}; strcpy(a+7,b); char *x; char *y; x=a+1; y=&a[1]; printf("%s\n",a);// printf("%s\n",b
数组名地址为什么和数组第一个元素的地址不同?
#include "stdafx.h" #include using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string word; word="apple"; cout<<&word<<endl; cout<<&"apple"<<endl; system("pause"); return 0; }