C语言的数组名的特殊情况

来源:互联网 发布:log4j2连接数据库 编辑:程序博客网 时间:2024/05/16 15:44

看到国内的教材这样写:这里写图片描述

但是存在一些特殊情况。

  • 第一种:数组作为&运算符的操作数
#include <stdio.h>int main(void){    int a[] = {1,2,3};//创建一个数组    int *l;//一个指向整数的指针    int(*p) [3];//一个指向指向数组的指针    l=a;//数组名只能代表一个指向整数的指针//p=a;    p=&a;//对数组名取地址才是指向数组的指针    printf("p=%p\n",p);    printf("l=%p\n",l);    printf("p+1=%p\n",p+1);    printf("l+1=%p\n",l+1);    return 0;}

这个例子中,a这个数组名,在p=&a;这个语句中明显不代表数组首元素的地址,而是代表整个数组。

  • 第二种情况:数组为sizeof运算符的操作数。
#include <stdio.h>int main(void){    int a[] = {1,2,3};//创建一个数组    printf("size=%d\n",sizeof a);    return 0;}

这个例子中,作为 sizeof 的操作数的数组名a,不代表数组首元素的地址。