一、指针的大小
指针在32位程序中占4个字节,在64位程序中占8个字节。
- 注意是在32/64位程序中而不是32/64系统!是环境决定了指针的大小。
二、数组指针和指针数组
- 数组指针是指针,是专门指向数组的指针。
//数组指针
int (*p)[10]
- 指针数组是数组,是存储指针的数组。
//指针数组
int* a[10]
三、数组名与&数组名的区别
(1)一维数组
int a[4] = {1,2,3,4};
- 如上面的数组a,a为数组名,代表数组首元素的地址,其本质是地址,所以可以将其看为普通的指针。
- &a,代表数组的地址,可以将其看成数组指针。
(2)二维数组
int a[3][4] = {0};
- a的类型为int(*p)[4],是数组指针。
- a[0]是第0行的数组的地址的类型,是指针。
四、sizeof()和strlen()的区别
sizeof() 是一种内存容量度量函数,功能是返回一个变量或者类型的大小(以字节为单位);在 C 语言中,sizeof() 是一个判断数据类型或者表达式长度的运算符。
strlen() 所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)。
- sizeof是运算符
作用:任意变量和类型的大小 - strlen是函数
作用:计算字符数组或者字符指针指向的数组的大小,遇到\0结束 - 注意:strlen(const char *p),传入的参数是指针类型。
- 特殊的:sizeof(数组名)这里特殊处理,没有计算本身类型的大小,算出的是数组的大小。
五、字符数组的初始化
char arr[] = "abcdef";
char a[] = {"a","b","c","d","e","f"};
- 第一种初始化方式在字符串末尾默认有\0,所以在使用sizeof(arr)计算时得到的结果为7,因为将\0也计算上了。
- 第二种初始化方式在字符串末尾默认没有\0,所以在使用strlen(a)计算时得到的是随机值,因为系统会一直计算知道找到\0为止。
2万+



被折叠的 条评论
为什么被折叠?



