传值和传址
在使用函数时一定要注意是否需要对形参做出改变,如果需要就用传址调用,如果不需要则用传值调用,形参只是实参的一份零时拷贝,改变形参的大小不影响实参。
函数传参时要分清楚传的是什么,如果传的是数组、字符串,那么传的就是首元素的地址,应该用指针去接收
数组
数组名确实是可以作为数组首元素的地址但是有两个例外;
1.sizeof(数组名)这个数组名代表整个数组的地址,计算的是整个数组的大小,单位是字节2.&数组名 这里的数组名是整个数组,取出的是整个数组的地址
二维数组可以看作是多个一维数组为元素的一维数组其性质与一维数组相似
程序员一定要注意数组越界的问题。避免产生bug
sizeof是一个操作符,他只关心变量的大小,不关心变量在内存中存放的具体内容
Strlen是一个库函数,他只能用来计算字符串的长度,他只管从给出的地址向后找\0,统计\0之前的所有的字符数
操作符
整数的二进制数有三种表示方式1.原码2.反码3.补码(第一位为符号位)。
正数的三个码相同,负数的反码等于原码的第一位符号位不变,其他的反转(即1变0,0变1)补码就是把反码的最后一位加1。
内存中存整数是以补码存储的。左移操作符是处理补码的,
左移操作符只针对整型(<<)规则是左边丢弃,右边加零。
虽然整数是以补码的形式存储的,但是要打印出来还是要先得到原码在打印
左移操作符有乘二的效果
右移操作符分为逻辑右移和算术右移,算术右移是指右边丢弃,左边放原来的符号,逻辑右移是指右边丢弃,左边放0。具体看使用什么编译来确定是什么右移
异或操作符很重要 在很多时候都用得上 因为两个相同的数异或操作符结果是0.
全局变量,静态变量未初始化时系统会默认初始化为0(放在静态区);局部变量是放在栈区的,未初始化会是一个随机值。sizeof返回的是一个无符号整型
指针
标准规定;允许指向数组指针与指向的元素的最后一个元素的后一个内存位置的指针进行比较,但是不允许与第一个位置之前的内存位置的指针进行比较。