C语言中 数组到底是不是指针和数组作为参数问题

如题所述

数组名可以当做指针来运算,但数组名是指向数组首地址的指针常量,不可改变的。比如:
int a[10] = {1,2,3,4,5,6,7,8,9,0};

a是数组的首地址,是不可改变的常量,即a是不可赋值的,a = a+1; 是错误的。
当数组名作为函数的参数时,形参数组中的值发生变化,实参数组中的值也会随之发生变化,因为两个指针是指向同一块地址的;实参数组名的固定常量,形参的数组名可以做指针变量处理。比如:
void fun(int arr[], int n){
arr = arr+1;

printf("%d\n", *arr);

}
其中arr在函数内部是可以赋值的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-12
数组是实际上指针的语法糖(即指针才是最原始的) ,仅仅在数组作为形参声明时数组才不可 解读为指针 eg:int func(int a[])
和 int func(int *a)
不同,其余情况都可 进行 指针 和数组的转换:即 a[i]=*(a+i)
一般 数组用于存储接收,而指针则用于 调用相关元素。当然两者都有前面的功能。
不知 清楚了没?
第2个回答  推荐于2016-07-07
首先看数组初始化。int a[8]={1};printf("[%d,%d,%d]/n",a[0],a[1],a[2]);数组必须在声明时定义其大小,否则会出错int a[]; //错误这种没有指定大小的数组,可以如下初始化;int a[]={1,2,3};char a[]="afasfsafsafsaf";这种没有指定大小的数组,编译器会根据初始化生成大小。printf("size%d,%d/n",sizeof(a),sizeof(b));显然数组声明是个数组结构不光是指针。看看下面这段代码:int a[]={1,1,1,1};void SetArray(int a[])void SetArray(int*a)这两个有区别么?作为参数时当然没有区别都是指针了。本回答被提问者采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网