2 gkc v GKC_V 于 2016.02.22 16:25 提问

C语言 a[0] 数组首地址只能给指针赋值吗 (a代表某数组)

如果不是的话,为什么下面的代码会出错:
图片说明

5个回答

skydream1
skydream1   2016.02.22 17:25

因为类型不同,min是int类型,而&a[0]是int * 类型

GKC_V
GKC_V a[0]是地址还是值?
2 年多之前 回复
GKC_V
GKC_V 可为何去掉“&”仍报错
2 年多之前 回复
hyb1996
hyb1996   2016.02.22 19:42


int mix=&a[0];
int max=&a[0];
改成

int *mix=&a[0];
int *max=&a[0];
就好了。另外,单词拼错了,最小值是min不是mix。

hyb1996
hyb1996   2016.02.22 20:01

a[0]是值,&a[0]是数组首地址,加&报错的原因是int mix=&a[0],mix是int,但&a[0]是int*,类型不匹配;不加&仍然报错,虽然int mix=a[0]类型匹配正确了,但是,函数minmax第三个参数要求的是int *mix,而你传入的是int,就报错了。对于max同理。正确做法是我刚才回复的。

Mr_Stack
Mr_Stack   2016.02.23 21:03

数组首地址是指针类型,你的意思是把这个a[0]的地址当做int类型传递给mix变量?

cjq694526101
cjq694526101   2016.02.24 21:38

a是一个int数组变量,a[0]是数组第一个值,是int类型,&a[0]是给数组a的第一个值a[0]取址,得到的是int*类型,该类型是一个指针,而且是一个指向int类型的指针。赋值运算符“=”两边的数据类型要一致。
看你的代码,你的原意是要获取数组首地址,所以你定义接收这个值的变量时也要定义成“指向int型的指针”类型,即int* min = &a[0];

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
数组名和数组首地址
一个变量有地址,一个数组包含若干元素,每个数组元素都在内存中占用存储单元,它们都有相应的地址。指针变量既然可以指向变量,当然也可以指向数组和数组元素(把数据起始地址或某一元素的地址放到一个指针变量中)。所谓数组的指针是指数组的起始地址,数组元素的指针数组元素的地址。     这种指针变量的定义与以前介绍的指向变量的指针变量相同。应当注意,如果数组为int型,则指针变量亦应指向int型。
数组首地址给赋给 指针的问题
#include #include void sort(int* in, int len, int** out); void sort(int* in, int len, int** out) {   *out = in; //把数组首地址给out指针,在此时,是正确的!                 //也就是in, out 指向的是同一内存区域!
关于将数组地址赋给指针的问题
对于 int (*p)[3];这条语句声明了:P是一个指向一个包含3个int值的数组的指针。 如下面对p赋值的例子:#include <stdio.h> #include <stdlib.h> #include <string.h> int main(){ int a[3] = {1, 2, 3}; int (*p)[3]; p = &a; ...
C语言二维数组的指针及首地址问题
若arr是一维数组名,我们知道*arr就是arr[0],就是*(arr+0)。因为arr是数组的首地址,*arr就是取首地址所指元素,就是数组的第一个元素。 同样的道理,arr是二维数组名时,*arr也是取arr的第一个元素,但是此时arr所指的元素是一个一维数组,所以,实际上arr所指元素是一维数组的首地址。 就按arr[3][4]这个例子来看:3行4列数组arr可以理解为arr[0],ar
c语言中数组名代表数组首地址,它的值在运行期间可以改变吗?
转载:http://blog.chinaunix.net/uid-12779255-id-2916004.html c语言中数组名代表数组首地址,它的值在运行期间可以改变吗? c语言中数组名代表数组首地址,它的值在运行期间是固定不变的,但是在main函数的参数中对指针数组名却可以出现类似于argv++的操作(谭浩强老师的c程序设计中有这样的程序),这不是前后矛盾了吗?盼
指针指向数组并指定数组首地址的一种方法
今天想到C语言可以为一个参数指定地址,那么如何为一个数组指定首地址呢? 借鉴参数指定地址的方法,先想到用一个指针来指向一个数组,同时定义数组的数据类型,我是这样定义的 short (*ptr)[1024; 这样就定义了一个指针,该指针指向数组类型为short类型,切长度为1024,但是这个指针或者说是数组并没有初始化的地址, 于是需要给它初始化一下,也就是指定数组的起始地址,我是这样做的
a a[0] &a &a[0]的理解
数组中几个关键符号(a a[0] &a &a[0])的理解(前提是 int a[10]) (1)这4个符号搞清楚了,数组相关的很多问题都有答案了。理解这些符号的时候要和左值右值结合起来,也就是搞清楚每个符号分别做左值和右值时的不同含义。 (2)a就是数组名。a做左值时表示整个数组的所有空间(10×4=40字节),又因为C语言规定数组操作时要独立单个操作,不能整体操作数组,所以a不能做左值;a做
数组的首地址和数组首元素的地址
#include void main () { int a[10]={1,2,3,4,5,6,7,8,9,10}; int *p1; int (*p2)[10]; p1=a; p2=&a; printf("%d\n",*p1); printf("%d\n",*(int *)p2); printf("%d\n",*(p1+1)); printf("%d\n",*(int *)(
C语言中二维数组名与数组地址、首行地址、首行首元素地址关系与区别详解(初学者必须掌握)
C语言作为很多大学理工科都会学习的语言,作为一种编程入门语言。但是相对于其他高级编程语言来说相对是比较难,尤其是指针,不知道有多少莘莘学子都是因为它,从C语言入门到放弃。想当年,笔者在大一学习C语言时也是被折磨的不轻,那个时候弄冒泡排序都不会。可能是那个时候逻辑思维不行吧,感觉工作后思维能力变强了,难道是被逼的,不知道你们有没有这种感觉。不扯了!进入主题,今天来探讨二维数组名到时是个啥?与数组地址...
解析:数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p
数组和指针向来就是傻傻分不清,当他们一起出现的时候就更加懵逼。使用实例详细解析:数组名a、数组名取地址&a、数组首地址&a[0]、数组指针*p