指针、数组与sizeof运算符

1、sizeof是C语言的一个运算符(主要sizeof不是函数,虽然用法很像函数),sizeof的作用是用来返回()里边
的变量或者数据类型占用的内存字节数。
2、sizeof存在的价值:
主要是因为在不同平台下各种数据类型所占的内存字节数不尽相同(譬如int在32位系统上为4字节,在16位系统上
为2字节)。所以程序中需要使用sizeof来判断当前变量/数据类型在当前环境下占几个字节。
3、举例说明:
例子1:char str[] = "hello";
sizeof(str)    //元素所占的字节数,也就是数组的大小   占6个字节
sizeof(str[0]) //第0个元素,第0个元素是char型的,所以 占1个字节
sizeof(str)    //字符串的长度(不包含最后的\0),     占5个字节
例子2:char str[] = "hello";  char *p = str;//str做右值,相当于首元素的首地址,数组的元素是char型,
                                            //那么str就是char *,刚好匹配
sizeof(p)      //p本身是一个指针变量,跟p指向的变量一点关系没有;只是一个char *指针的长度,
               //32位系统上所有的指针的长度都是4
sizeof(*p)     //p所指向的变量,p所指向的变量是char型的,相当于sizeof(char)   自然是1
strlen(p)      //相当于strlen(str)     5
例子3:
int b1[100] = {0};
printf("sizeof(b1) = %d.\n",sizeof(b1));           //400   100*sizeof(int)
short b2[100] = {};
printf("sizeof(b2) = %d.\n",sizeof(b2));           //200   100*sizeof(short)
double b3[100];
printf("sizeof(b3) = %d.\n",sizeof(b3));           //800   100*sizeof(double)
4、
 #define  dpChar  char *
 typedef  char * tpChar;
 dpChar p1, p2;//展开:char *p1,p2; 相当于char *p1,char p2;  所以sizeof(p1)为4,sizeof(p2)为1
 tpChar p3, p4;//相当于char *p3,char *p4;   所以sizeof(p3)为4,sizeof(p4)为4  
5、
(1)函数传参,形参是可以传数组的
(2)函数形参是数组时,实际传递的不是整个数组,而是数组的首元素首地址。也就是说函数传参用数组来传,
     实际相当于传递的时指针(指针指向数组的首元素首地址),所以下边的结果是4,而不是80
void func(int a[])//func完全等同于func1
{
 printf("数组大小 = %d.\n",sizeof(a));
}
void func1(int *a)
{
 printf("数组大小 = %d.\n",sizeof(a));
}
int main(void)
{
 int a[20];
 func(a);   //打印出来的结果是4,因为a在函数内部是指针,而不是数组
}
posted @ 2019-08-18 16:44  志瞳道合  阅读(554)  评论(0编辑  收藏  举报