c语言数组不可以当成指针使用,但是指针可以当成数组使用
假如在主函数中int*t;把他当成数组使用t[3]=5;t++;*t=8;然后输出t[4]和t[1]发现t[4]没有变,但是t[1]变成了8,是不是因为在把指针当成数组使...
假如在主函数中int *t;把他当成数组使用 t[3]=5; t++; *t=8; 然后输出t[4]和t[1] 发现t[4] 没有变,但是t[1]变成了8,是不是因为在把指针当成数组使用时,在用t[3]= 值 赋值时,指针还是指向首地址,所以当t++后指向了t[1]的值而并不是指向了t[4],
展开
2个回答
展开全部
指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。
数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
比如说定义int *w
然后下边就可以用作w[i]
这么对吗?
对的话在什么情况下可以这么使用?
答:不可以,因为w这时还是野指针。只有这样
int *w,a[44];
w=a;
操作后才可以,操作w就与操作a一样了。而且,操作指针比直接操作数组名更方便,因为指针是变量,可以++、--,而数组名是常量,不能++、--。
你追问的那个红框框中的问题不是指针与数组名的问题,而是“形式参数”与“实际参数”的问题。写函数定义的()中的前面带类型说明符的变量名叫形式参数。形参与实参相比,最大的特点就是不用担心没有赋值或初始化就拿来引用,它们是留着调用时才用实参自动赋值的。而实参则不然,没有赋值时拿来做右值,就会被警告“引用了没有初始化的变量”,而且因为初值是随机的而结果一般都是错误的。
数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
比如说定义int *w
然后下边就可以用作w[i]
这么对吗?
对的话在什么情况下可以这么使用?
答:不可以,因为w这时还是野指针。只有这样
int *w,a[44];
w=a;
操作后才可以,操作w就与操作a一样了。而且,操作指针比直接操作数组名更方便,因为指针是变量,可以++、--,而数组名是常量,不能++、--。
你追问的那个红框框中的问题不是指针与数组名的问题,而是“形式参数”与“实际参数”的问题。写函数定义的()中的前面带类型说明符的变量名叫形式参数。形参与实参相比,最大的特点就是不用担心没有赋值或初始化就拿来引用,它们是留着调用时才用实参自动赋值的。而实参则不然,没有赋值时拿来做右值,就会被警告“引用了没有初始化的变量”,而且因为初值是随机的而结果一般都是错误的。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询