打印
[DSP编程]

指针、数组与sizeof运算符

[复制链接]
558|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
蒋博1026|  楼主 | 2019-10-23 21:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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在函数内部是指针,而不是数组
}

使用特权

评论回复

相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

323

主题

1820

帖子

18

粉丝