扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
如下提示供参考:
在东兰等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供网站设计制作、成都网站建设 网站设计制作按需网站建设,公司网站建设,企业网站建设,品牌网站设计,成都全网营销,成都外贸网站制作,东兰网站建设费用合理。
int ddata[20] 是 scanfArr 函数内部定义的,是 局部变量,上面 arr = ddata,导致 scanf 输入的数组元素会保存到 局部变量 数组中,并无意义。
从问题描述,提供以下代码供参考:
#includestdio.h
void scanfArr(int *arr,int n)
{
int i;
printf("请输入5个数(以回车键结束):\n");
for(i=0; in; i++,arr++)
scanf("%d",arr);
}
void main()
{
int i, ddata[5];
scanfArr(ddata,5);
printf("输入的数组如下:\n");
for(i=0;i5;i++)
{
printf("[%d] : %d\n",i, ddata[i]);
}
}
运行截图:
int **a可以表达一个二维数组。为什么呢?
你可以这么理解 * p[3]表达的是一个数组指针,这个指针 p[0]表示的是数组存的第一个地址。而数组实际上是一串连续地址的块。每一个小块存着一个内容。每次访问数组时,你为什么可以用数组名+下标访问呢? //比如a[i];
实际上就是 访问*a+i; * 这个符号可以表示你存的是变量的地址。而数组地址的第一位为int类型变量存的地址(你可以直接使用数组的地址加上单位变量的空间的大小去访问下个元素)。在这个程序中int *p[3] 表示可以存三个int 类型的地址。而p正好把二维数组的三个一维数组的开头的int类型变量的地址给存起来了。
给你举个例子
我现在输出的是地址,是不是连续的?
用*运算符获取地址的内容。
实际上p[i]与 *(p+i)是表达的是同一个意思。只不过只有数组可以定义一个连续的空间
(数组的第一个地址是随机的其他的是连续的。)单独用指针的话会随机分配的
数组的指针可以存三个地址。当然可以访问二维数组了。
数组名就是指针,例如:
#include stdio.h
void pr(char *p)
{
printf(p);
}
void main(void)
{
char s[] = "abc";
pr(s);
}
扩展资料:
注意事项
非数组类的声明尽量以指针的方式进行比较好。倘若一个指针指向的内存并不是一个数组,那么采用数组名的声明方式或许就会给人产生错误的引导。类似的,如果指向的是一个数组区域,则会给人以更加丰富的信息。例如:
int main(int argc,char* argv[])
{
/* code here */
}
与
int main(int argc,char** argv)
{
/* code here */
}
两种方式完全等价,但是前面一种能够更清晰地看出:这个参数是指向某个元素起始地址的指针,而后面的这种方式则不能够直观地看出这种含义。
指针数组:数组成员是指针的数组。
作用:数组的属性全有。因为成员是指针,这就可以延伸出很多内容。包括:
成员是函数指针,整个数组就是一类相关函数的集合,便于代码架构的管理。
成员是链表指针啦,char指针,这种就是能做出类似散列表的结构。
总体来讲,就是一组相关数据的指针的集合,达到的目的就是搜集指向相关数据的指针放到一个集合里面。
由于你在子函数int *shuzu(void)中定义的数组 a[4];属于局部变量,在子函数结束时会被释放,所以返回的指针变成野指针,会乱码;简单的解决方法有两种,1. 将数组定义在主函数之前(#include stdio.h下面),那么就变成了全局变量,不会被释放了;2.使用malloc或者calloc开空间后再赋给这个数组,这样也不会被释放了;第一种方法有缺点,以后学到全局变量的时候会知道,第二种方法估计你还没学到,不过很简单,百度一下就会了~~~
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流