【C】数组名在哪些情况下不是常量指针?

如题所述

C中的数组名为常量指针,但两种情况下,数组名不用常量指针来表示:1、当数组名作为sizeof操作符的操作数时,数组名表示整个数组,而不表示指向数组第一个元素的常量指针。举例来说:int arr[5] = {1, 2, 3, 4, 5};int arrSize = sizeof(arr);此时,arr表示的是整个数组,而非常量指针。所以arrSize = 4 * 5 = 20。如果arr表示的是常量指针,则arrSize的结果就不会是20, 而是4。如下所示:int arr[5] = {1, 2, 3, 4, 5};//此处指针p指向数组的首元素int *p = arr;int arrSize = sizeof(p);综上所述,可以支持论点1;2、当数组名作为&操作符的操作数时,数组名表示整个数组,而不表示指向数组第一个元素的常量指针。举例来说:int arr[5] = {1, 2, 3, 4, 5};int *p = &arr;此时,arr表示的是整个数组,而非常量指针。所以p的值为数组首元素的地址。如果arr表示的是常量指针,则p的值就不会是数组首元素的地址, 而是指向现在指针p的一个指针,如下所示:int arr[5] = {1, 2, 3, 4, 5};//此处p为指向数组首元素的指针int *p = &arr;//如果在这种情况下,数组名表示常量指针,则&arr相当于&p(这是错的)综上所述,可以支持论点2.
温馨提示:答案为网友推荐,仅供参考
相似回答