注意点:
1、带*类型的变量宽度永远是4字节、无论类型是什么,无论有几个*.
2、带*类型的变量,++ 或者 -- 新增(减少)的数量是去掉一个*后变量的宽度
3、带*类型的变量可以加、减一个整数,但不能乘或者除.
4、带*类型变量与其他整数相加或者相减时:带*类型变量 + N = 带*类型变量 + N*(去掉一个*后类型的宽度)
char* a;
short* b;
int* c;
a = (char*)100;
b = (short*)100;
c = (int*)100;
a = a + 5;
b = b + 5;
c = c + 5;
printf("%d %d %d", a, b, c);
//105 110 120
char** a;
short** b;
int** c;
a = (char**)100;
b = (short**)100;
c = (int**)100;
a = a + 5;
b = b + 5;
c = c + 5;
printf("%d %d %d", a, b, c);
//120 120 120
5、两个类型相同的带*类型的变量可以进行减法操作,想减的结果要除以去掉一个*的数据的宽度.
char* a;
char* b;
a = (char*)200;
b = (char*)100;
int x = a - b;
printf("%d\n", x);
//100
short* a;
short* b;
a = (short*)200;
b = (short*)100;
int x = a - b;
printf("%d\n", x);
//50
6、带*的变量,如果类型相同,可以做大小的比较。
7、带*类型的变量,可以通过在其变量前加*来获取其指向内存中存储的值.
8、在带*类型的变量前面加*,类型是其原来的类型减去一个*.
9、&arr[0]代表取数组中第一个元素的地址,可以省略为数组名.
10、*(p+i) = p[i].
11、数组做为参数时,传递的是地址.数组做为参数时,应该传递数组的长度.
12、字符串:编译器后在后面添一个 00 做为字符串的结束标记。%s:打印一个字符串,直到内存为 0 为止;
13、int *p[5] 与 int (*p)[5] 有什么区别?
前者是数组指针,指向数组的指针,因为[] 的优先级高于* 所以先组合成p[5]数组 再由int *说明 数组存储的类型 == int* p[5];
或者是指针数组,数组里面存放的是指针,因为() 的优先级高于[] 所以*先p先组合成指针 再由int[5]说明数组的宽度。