09月17, 2018

C的数组类型的一些问题

我们知道,在C中,对指针类型取地址的话,取到的是这个指针变量的地址;而对数组类型取地址的话,无论多少次取地址,取到的值都是一样的,值都等于数组元素的首地址。

这就引发了一个问题,我们看下面这个例子。

typedef int arr[50];
arr c;
void f(arr *b)
{
    cout<<*b<<endl;
}
int main()
{
    cout<<c<<endl;
    cout<<*(arr *)c<<endl;
    f((arr *)c);
    int a=5;
    cout<<*(arr *)a<<endl;
    return 0;
}

输出的前三个结果都是一样的,都是数组的首地址,最后一个输出的结果是5,也就是a的值。

我们可以看出,对于一个指向数组的指针类型解指针的话,得到的还是它本身,但如果是其他类型,例如int *类型就不行了。

本文链接:https://debug.fanzheng.org/post/about-C-array-type.html

-- EOF --

Comments

评论加载中...

注:如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理。