11_10

C语言

1.sizeof语句(        简单逻辑的嵌套        )        

sizeof(&a)        &a是一个指针变量,大小是4或者8

&a+1也还是地址,

sizeof(arr)和sizeof(arr+1)  sizeof里面如果只有数组名,则表示一整个数组,如果不是(进行了运算)那就代表首元素
二维数组同理sizeof(arr[0]) != sizeof(arr[0]+0)

int main()
{
	int a[3][4] = { 0 };
	printf("%d\n", sizeof(a));//48
	printf("%d\n", sizeof(a[0][0]));//4
	printf("%d\n", sizeof(a[0]));//16
	//a[0]是第一行这个一维数组的数组名,单独放在sizeof内部,a[0]表示第一个整个这个一维数组
	//sizeof(a[0])计算的就是第一行的大小
	printf("%d\n", sizeof(a[0] + 1));//4/8
	//a[0]并没有单独放在sizeof内部,也没取地址,a[0]就表示首元素的地址
	//就是第一行这个一维数组的第一个元素的地址,a[0] + 1就是第一行第二个元素的地址
	printf("%d\n", sizeof(*(a[0] + 1)));//4
	//a[0] + 1就是第一行第二个元素的地址
	//*(a[0] + 1))就是第一行第二个元素
	printf("%d\n", sizeof(a + 1));//4/8
	//a虽然是二维数组的地址,但是并没有单独放在sizeof内部,也没取地址
	//a表示首元素的地址,二维数组的首元素是它的第一行,a就是第一行的地址
	//a+1就是跳过第一行,表示第二行的地址
	printf("%d\n", sizeof(*(a + 1)));//16
	//*(a + 1)是对第二行地址的解引用,拿到的是第二行
	//*(a+1)-->a[1]
	//sizeof(*(a+1))-->sizeof(a[1])
	//
	printf("%d\n", sizeof(&a[0] + 1));//4/8
	//&a[0] - 对第一行的数组名取地址,拿出的是第一行的地址
	//&a[0]+1 - 得到的是第二行的地址
	//
	printf("%d\n", sizeof(*(&a[0] + 1)));//16
	printf("%d\n", sizeof(*a));//16
	//a表示首元素的地址,就是第一行的地址
	//*a就是对第一行地址的解引用,拿到的就是第一行
	//
	printf("%d\n", sizeof(a[3]));//16
	printf("%d\n", sizeof(a[0]));//16

	//int a = 10;
	//sizeof(int);
	//sizeof(a);

	
	return 0;
}

2.strlen

本质是一个函数,有传参,有返回值

从给定的地址开始往后数字符,直到遇到\0停下,

所以strlen(int x)不对

char*p = "abcdefg";
strlen(&p)和strlen(&p+1):
strlen是一个函数,接收一个char*参数,从此参数开始往后一个字节一个字节遍历直到遇到\0停止,返回一个整数
&p会从p开始往后遍历,p里面存的是一个4/8个字节的地址,谁也不知地址里面有没有表示\0的ASCII码值,所以谁也不知会不会在读取p的每一个字节时停下来

3.指针题

 

这张图知识点:强制类型转换以及转换后的运算规则,内存存储方式(小端存储),%x

在C语言中,%x是一个格式说明符,用于将整数以十六进制形式输出

4.二维数组的初始化错误

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值