c语言数组不可以当成指针使用,但是指针可以当成数组使用

假如在主函数中int *t;把他当成数组使用 t[3]=5; t++; *t=8; 然后输出t[4]和t[1] 发现t[4] 没有变,但是t[1]变成了8,是不是因为在把指针当成数组使用时,在用t[3]= 值 赋值时,指针还是指向首地址,所以当t++后指向了t[1]的值而并不是指向了t[4],

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。
数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
比如说定义int *w
然后下边就可以用作w[i]
这么对吗?
对的话在什么情况下可以这么使用?

答:不可以,因为w这时还是野指针。只有这样
int *w,a[44];
w=a;
操作后才可以,操作w就与操作a一样了。而且,操作指针比直接操作数组名更方便,因为指针是变量,可以++、--,而数组名是常量,不能++、--。
  你追问的那个红框框中的问题不是指针与数组名的问题,而是“形式参数”与“实际参数”的问题。写函数定义的()中的前面带类型说明符的变量名叫形式参数。形参与实参相比,最大的特点就是不用担心没有赋值或初始化就拿来引用,它们是留着调用时才用实参自动赋值的。而实参则不然,没有赋值时拿来做右值,就会被警告“引用了没有初始化的变量”,而且因为初值是随机的而结果一般都是错误的。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-10-23
int
a[10]
;
int
*p=a
;
//定义一维指针p,并指向数组a首地址。
p=a+2

//指向数组a的第三个元素
或写成:
p=
&a[2]
;
//通过&运算符号来取a[2]的地址,赋值给p
p=&a
;
//这是错误的语句!因为,&a的类型是int
**,
而p是int
*类型,所以,类型不相符,不能进行赋值操作。
相似回答