社区
C语言
帖子详情
关于数组与指针的小问题
lutong
2003-07-09 11:31:31
void f(int (*p)[])
{
}
int a[][2] = {2,3,4,5};
f(a);
我的问题是:
(1) 形参指针指向的类型为int [], 实参指针指向的类型为int [2], 为什么不相容? 类型相容到底有什么要求?
(2)为什么extern int a[10] 和 extern int a[]等价?
...全文
32
5
打赏
收藏
关于数组与指针的小问题
void f(int (*p)[]) { } int a[][2] = {2,3,4,5}; f(a); 我的问题是: (1) 形参指针指向的类型为int [], 实参指针指向的类型为int [2], 为什么不相容? 类型相容到底有什么要求? (2)为什么extern int a[10] 和 extern int a[]等价?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
lutong
2003-07-10
打赏
举报
回复
是不是可以这样理解:
对于一个定义
void f(int (*p)[])
{
}
而言,编译没有问题,说明符合语法要求。
但是,int a[][2] = {2,3,4,5};
f(a); 此时编译器对实参和形参进行匹配,
首先将实参转换为int (*a)[2],即指向两个整数的
数组的指针,由于形参对应于一个二维数组,
其第二维和实参不匹配,所以形参指针也就和
实参类型不相容,导致编译错误。
结论是,函数必须定义为:
void f(int (*p)[2] )
{
}
hex
2003-07-10
打赏
举报
回复
好像不是这样的。
还是gzlucky(Lucky)说得对,你的声明错了。
此外还可以给你几个例子:
int a[3][4];
int **p1;
int *p2[4];
int (*p3)[3];
p1=a;//ok
p2=a;//ok
p3=a;//ok
可以用二重指针完成你的函数。
pengzhenwanli
2003-07-10
打赏
举报
回复
(2)为什么extern int a[10] 和 extern int a[]等价?
因为extern int a[]只是一个声明,要到联接的时候才找定义,
只要编译器知道就行了。
型别相容
比如说指针和数组,
idontlikenickname
2003-07-10
打赏
举报
回复
void f(int (*p)[]) // 接收的参数是一个数组指针,该指针指向一个含有两个整型元素的数组.
{
}
int a[][2] = {2,3,4,5};
// 应该这样调用.
f(&a[0]);
f(&a[1]);
或者
f(a + 0);
f(a + 1);
gzlucky
2003-07-09
打赏
举报
回复
你应该定义为:
void f(int (*p)[2] )
{
}
这是一个多维数组,如果你不定义除第一维外的其他维数的下标值,系统是不和道如何访问这个多维数组的。
int a[10] 和 int a[] 都是一个一维数组,所以不需要标的,系统都知道如何访问。
数组
指针
和
指针
数组
首先,理解一下
数组
指针
和
指针
数组
这两个名词: “
数组
指针
”和“
指针
数组
”,只要在名词中间加上“的”字,就知道中心了——
数组
的
指针
:是一个
指针
,什么样的
指针
呢?指向
数组
的
指针
。
指针
的
数组
:是一个
数组
,什么样的
数组
呢?装着
指针
的
数组
。 然后,需要明确一个优先级顺序:()>[]>*,所以: (*p)[n]:根据优先级,先看括号内,则p是一个
指针
,这个
指针
指向一个一维
数组
,
数组
长...
C
指针
---
指针
数组
与
数组
指针
数组
指针
是指向
数组
的
指针
(本质上是一个
指针
)与
指针
数组
不同,
数组
指针
指向的是一个整个
数组
,而不是
数组
的单个元素。用例:声明一个指向包含 5 个int元素的
数组
的
指针
// ptr 是一个指向
数组
的
指针
// 通过
数组
指针
访问
数组
元素// 也可以直接通过
数组
指针
遍历
数组
i < 3;:声明了一个
数组
指针
ptr,它指向一个包含 3 个int元素的
数组
。(*ptr)[i]:通过解引用
数组
指针
ptr来访问
数组
元素。
数组
指针
:指向整个
数组
。例如,
【C语言】关于
指针
数组
与
数组
指针
详解(知识点全面)
单独使用时表示的是第 1 行数据,放在表达式中会被转换为第 1 行数据的首地址,也就是第 1 行第 0 个元素的地址,因为使用整行数据没有实际的含义,编译器遇到这种情况都会转换为指向该行第 0 个元素的
指针
;每一个一维
数组
又包含了 4 个元素,例如 arr[0] 包含 a[0][0]、a[0][1]、a[0][2]、a[0][3]。需要注意的是,字符
数组
str 中存放的是字符串的首地址,不是字符串本身,字符串本身位于其他的内存区域,和字符
数组
是分开的。表明 p 是一个
指针
,它指向一个
数组
,
数组
的类型为。
数组
指针
与
指针
数组
数组
指针
与
指针
数组
指针
数组
1.什么是
指针
数组
指针
数组
是一个
数组
,用于存放
指针
的
数组
,即将
指针
(所指向的内存地址)作为
数组
元素的类型,存入的元素为变量或者是常量。
指针
数组
存放的是很多
指针
的集合 2.定义一个
指针
数组
格式:数据类型 *
指针
名 [
数组
大小] 例:int *p[5] 长度为5的
数组
里面存放了5个类型为int* 类型的
指针
。(如果存入的是字符串常量,则为该常量对应的首地址) 这里可以看到,
数组
...
指针
数组
和
数组
指针
1.什么是
指针
数组
和
数组
指针
顾名思义:
指针
数组
是“
指针
的
数组
”,这个变量是一个
数组
,用
指针
修饰,
数组
中的每个元素都是
指针
。
数组
指针
是“
数组
的
指针
”,这个变量是一个
指针
,用
数组
修饰,这个
指针
存储着
数组
的首元素 2.
指针
数组
和
数组
指针
到底是什么
数组
指针
和
指针
数组
在本质上的区别便是优先级关系,我们需要注意到底是
指针
的优先级高还是
数组
的优先级高,如果
数组
的优先级高是
指针
数组
,如果
指针
的优先级高便是
数组
指针
。 总结起来就是目的是谁,便让谁的优先级高就可以了。
指针
数组
: char* arr[]=
C语言
70,035
社区成员
243,244
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章