(1)sizeof 和 strlen 的对比
1——sizeof
sizeof最好用 %zd
sizeof是操作符不是函数
sizeof与一维数组(****)
sizeof(*arr) == sizeof(arr[0])
字符指针与sizeof
p里面储存的是字符串中首字符的地址
二维数组与sizeof(重要)
sizeof 并不会真实计算它只会根据类型来推测
2——strlen
strlen最好用%zd
要包含头文件
****注意
strlen要找到/0才停止所以arr1它会一直找下去直到遇到/0
strlen与一维数组的关系
strlen函数
strlen(arr)与strlen(&arr)与strlen(arr + 0)一样
strlen接收的是地址
strlen(数组名)就代表是首元素的地址
字符指针与strlen
(2)指针运算笔试练习题
1
2
struct Test
{
int name;
char * pcName;
}* p
意思是结构体指针类型化
*与结构体一起的
0x100000是整型需要强制类型转换
指针+1 和类型有关
整型+1就是+1
3
(0,1)——逗号表达式——整个表达式的结果是最后一个数
4
(数组指针补充)
int arr[5][5];
int (*pa)[4] = a;
将 int(*p)[5]类型的a赋给int(*p)[4]的pa
所以pa+1就跳过4个元素
题目p
结果
地址与地址相减结果就是他们之间元素的个数的绝对值
解析:&p[4][2]-&a[4][2] = -4
-4在编译器中以补码的形式存在
%p没有负数的概念所以%p打印时就是把内存中的补码直接打印出来
用%u打印时不用再将补码转换为原码而是直接打印
用%d打印需要求原码
5
答案:10,5
6
char* arr[] = {"work","lihua","anli"};
arr[][]里面存的是w,l,a的地址
类似:char* a = "work";
答案:at