为了账号安全,请及时绑定邮箱和手机立即绑定

c语言什么时候使用数组,什么时候使用指针?

c语言什么时候使用数组,什么时候使用指针?

C
青春有我 2019-04-09 05:04:36
c语言什么时候使用数组,什么时候使用指针?
查看完整描述

4 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

任何时候都可以使用数组,使用指针。

定义时,通常只有字符指针,和字符数组指针直接定义。用来表示字符串或字符串数组。
其他一般定义数组。操作时用指针或数组。

其他指针,多半用在参数传递,数据结构内部(不确定需要内存的大小,或者链表,二叉树等链式结构)的时候。
还有一种是有些函数参数就是指针,这时定义一个指针,来操作传进来的指针参数比较好。

指针作为参数,有一下几种用法,

1)当作数组用,用来获取或设置数组元素。
2)把一个比较长的数据结构传入函数,只需要一个指针就够了。
3)传入变量的地址,用来读取或修改变量的值,主要是为了修改用。

直接定义一个不指向任何对象的指针,并且也从不给他赋值,没什么意义;

指针要么指向数组,要么指向变量,要么动态申请内存。
NULL指针,只是一个方便的指针,表示不指向任何对象。

真正有用的还是指向具体对象的指针。
如果定义了一个指针,使用时要让他指向一个具体对象,当需要他不指向什么对象的时候,给他赋值为NULL;
PS:
C语言,数组名只是一个指针常量而已,离开定义可见处,数组大小的信息就不存在了。
只有定义完全可见的地方,才可以获得数组的大小。
数组作为函数的参数,和外部引用声明都不能获得数组的大小。
参数只能传递指针,参数的大小只是指针的大小;
只能看到声明的地方,获取数组大小的努力,只能换来错误。

void fun1(int a[10]) //<==> void fun1(int a[]) <==>void fun1(int *a)
{
}
void fun2(int [10][10])// <==>void fun2(int a[][10])<==> void fun2(int (*a)[10])
{
}




查看完整回答
反对 回复 2019-04-10
?
幕布斯7119047

TA贡献1794条经验 获得超8个赞

个人认为,当你需要某一变量需要一直存在的话,那么程序初始化时就可以直接使用数组之类的;
而当你需要对已存在于内存的某些量做改变时,则适宜使用指针。
这里需要注意的是,使用数组的前提是内存静态分配,其大小是不可改变的;所以若要求动态分配的话,还是需要使用指针的。希望对你有所帮助。

查看完整回答
反对 回复 2019-04-10
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

数组指针--指向数组的指针,是一个指针,其指向的类型是数组;指针数组--元素为指针的数组,是一个数组,其中的元素为指针。仔细研读下面的程序:
#include <stdio.h>

int
main(void)
{
int a[2][2] = {{1,2},{3,4}};
int (* p)[2];
char * s[2] = {"hello", "world"};

p = a;
printf("%d, %d, %d, %d\n", (*p)[0], (*p)[1], (*(p+1))[0], (*(p+1))[1]);
printf("%s %s\n", s[0], s[1]);

return 0;
}


查看完整回答
反对 回复 2019-04-10
?
千巷猫影

TA贡献1829条经验 获得超7个赞

如果你想静态定义的时候你可以使用数组,动态定义的话可以使用指针,可以通过关键字new来给指针分配内存空间,例如,
char arr[10] 你无论用不用得完这数组,这空间都会被占用
但是如果你定义 char *arr;
然后再根据你要存的数据的大少分配内存,就省空间咯!

查看完整回答
反对 回复 2019-04-10
  • 4 回答
  • 0 关注
  • 1057 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信