1 , C语言对数组元素的引用没错误&是取地址,而*是访问这个地址.与写x[0]是一样的.正确&x[0]是x数组的首地址*是指针,指向&x[0]地址的指针,那printf("%d",*&x[0])的话就是用int类型输出x数组的首位(也就是1) 。*&x[0] 相当*(&x[0])先取地址 , 在取值 , 这个是可以的 。&*x[0] 形式这种才是错误的 。。。A 的值为1 , 取地址后取值 。B此时X作为地址使用,后移3个int单位,此时由于数组初始化时没给出值,默认会初始化为0,但是有的编译器也会报错 。所以不确定 。Cp里面保持的是X的地址值,*p=x 又等价于,*p=&x[0],所以这里是x向后移10个int单位,明显越界 。Dp+3,地址加数值 , 。。。无意义
2,c语言中数组元素的引用若有定义int a[5] = 可a[0]-a[4]来引用对应的元素1-5
3 , c语言入门 数组元素的引用 感谢帮助p表示a[0],p+i就表示a[i]了呗这句话不对数组名代表的是这个数组的初地址,是个地址值,不代表元素的p+i就表示a[i]的地址,要想表示这个元素,得是*(p+i)至于*(&a[i])当然是正确的&a[i]代表a[i]的地址*(&a[i])不就是指向a[i]的元素么不会的可以HI我1.数组元素 是值2.p+i是表示地址3. 对于*(&a[i])其中 &a[i]表示a[i]的地址,加个*就表示值了p+i只是a[i]的地址,并不是a[i]的元素值 。*(&a[i])是先取a[i]的地址 , 然后再对这个地址解引用,所以*(&a[i])相当于a[i]没错误&是取地址,而*是访问这个地址.与写x[0]是一样的.p表示的是&a[0],p+i表示的是&a[i]D有&a[i]是a[i]的地址*是对地址对应内容的引用【c语言引用数组元素,C语言对数组元素的引用】
4,在C语言中怎样引用数组中所有的元素啊要引用数组宏的每个元素做些计算 , 可以将数组及数组的长度作为参数同时传递给调用函数就可以实现了,比如:#include<stdio.h> int sum(int a[], int size) int i, result = 0;for (i = 0; i < size; i++) result += a[i];}return result;}main() int a[8];int s,i;for (i = 0; i < 8; i++) scanf("%d", &a[i]);}s = sum(a, 8);printf("%d", s);}5,C语言用指针引用数组元素(*p)[3]是定义一个指向一维数组的指针,数组元素为三 。也就是说p指向的其实是a[0],a[1],a[2]这样的形式 。p=a;其实就是把第0行的首地址赋值给p.所以答案C中p[1]即是把第1行的首地址给p,在此基础上向后移一位 , 取出地址中的元素数值 。*(p[1]+1)相当于a[1][1].所以是对的 。B的形式是对的,但是它相当于a[2][1],超出界限所以为错 。剩下的两个格式就不对 。p是指向有3个int*型元素的指针,也可以说p代表一维数组,p=a就是把a指针放到p数组的第一个位置,因此p[1]是指a,那么c选项就是访问a的第一个元素二维数组名a是一个指向指针的指针 。也是一个指针数组名,它含3个元素,a[0]a[1],a[2] 。虽然a存储的地址是该数组首元素的地址 , 但它指向的并不是一个变量,而是一个指针 。应为a是一个指向指针的指针,它指向的是和自己存储的地址相同的指针,即a[0],a[0]是第一行一维数组的指针 , 可以指向具体变量 。这下明白了吧,*(a+0)它不是变量,她是指针,a指向a[0],*(a+0)就是a[0].int (*p)[3]可以看做struct{int m [3]}*p;表示一个装有三个整数的指针,p[1]相当于地址加3个整形的大小,再加一相当于地址又加了1赋值后,指针数组的第一个指针指向字符串数组(a)里的第一个字符串的第一个字符,第二个数组指向第二个字符串的第一个字符 , 第三个指针没有指向任何实体是空的 。A.是一个指针,指向a中第二个字符串B.由于a的第一维大小为二,故B选项是空的,没有应用a中的元素 。D.也是一个空指针 , 没有应用任何元素6,C语言关于数组元素引用的问题谢谢达人int a[5],*p=a+1,声明了一个int数组a[5],然后声明了一个int指针p,*p=a+1中的a表示数组a[5]中a[0]的地址,a+1表示a[0]地址往后移动一位 , 也就是a[1]的地址,*p=a+1表示指针p指向了a[1] 。选项A是错误的语法 , 选项B的a+2的结果是a[3]的地址,而不是元素内容,是错误的;选项C的*(p-1)的结果是a[0]的内容;选项D的*(p+4)得的是a[5]的内容,是错误的;我认为正确答案是C,你可以上VC++里编个程序看下 。第二题:int a[2][3],(*p)[3];p=a的意思是声名一个2行3列的数组a,声明一个3维指针p,把数组a[0][0]的地址赋予指针p[0];选项A语法错误;选项B超出了数组指针的范围;选项C表示数组a的第3行1列元素 , a只有2行3列 , 超出了范围;其中p+2表示a数组的第3行的地址,*(p+2)+1表示a数组第3行1列元素地址,*(*(p+2)+1)表示3行1列元素内容;超出了a数组的范围.选项D表示2行2列元素,其中p[1]表示a数组2行1列的地址,p[1]+1表示a数组2行2列地址,*(p[1]+1)表示2行2列元素内容 。D选项是正确的数组指针:*(p+i)+j 是二维数组的地址用的时候是*(*(p+i)+j)你那个是地址而已后面的就当零 这个应该没错的 - - 你说他错 是指什么第一个答案错 , 选c , 如楼上所说,*(p+4)指向a[5]越界 。第二个正确,(*p)[3]表示p是一个一个指向含有三个元素的数组的指针,三个元素为a[2][3]的矩阵的三个列,a[0][0],a[0][1],a[0][2] a[1][0],a[1][1],a[1][2] p=a,表示p指向a数组的首地址,答案里A , B不能表示元素内容 , 只是个地址,c表示第1列的第3行,明显越界了,所以是D第一题:A、C语言中数组下标从0开始,最多也只能到a[4] , 所以A错 。B、C语言中数组名是指向第一个元素的指针,所以a+2是指向第3个元素 。C、p是指针,是指向第二个元素,所以*(p-1)是引用第一个元素 。D、p+4超出数组上界,错误所以应该选择 C第二题:分析可以得到p是指向数组的同时也是指向第一行第一个元素的指针,数组应该如下:* * ** * *A、B中不存在取元素操作符肯定错,必须有*操作符 。C、一般来说*(*(p+i)+j)指的是a[i][j] , 则C为a[2][1],出界了哈 , 错误D、p[1]指向第二行第一个元素,所以D是指向第二行第二个元素 。
推荐阅读
- 苹果可以设置应用锁吗,苹果手机可以给某一个软件加密吗
- 免费下载app的软件下载,下载app免费下载
- plc编程要学多久左右,学三菱plc编程最快多长时间上手
- 安卓原生开发工具,android应用程序的开发要用到哪些工具
- 车到加油安卓,这些加油app怎么做?
- 苹果最新系统153怎么样,苹果新系统ios712怎么样
- imovie剪辑怎么竖屏,iphone手机imovie里怎样把竖着拍摄的视频全部显示而不是只显示正方
- 打开浏览器下载APP,手机浏览器下怎么打开app应用
- 程序员 游戏,程序员玩游戏吗