c高级之指针2

1指针与强制类型转换:
int char short(兼容型)是同一类属于整型,他们的存储方式(即转换成内存中的二进制的方式)是相同的,只是内存格子长度不一样。
float是一类
double是一类


a做左值存数进去时,是按照a的数据类型来存储的,用printf()来读取时是按照里面的%d,%f,%c之类的来解析,但是内存本身的内容是没有被改变的,只是读取的解析方法不同。
数据类型决定了一个数怎么在内存中存储成二进制
2
一个指针涉及2个变量:一个是指针变量自己本身,一个是指针变量指向的那个变量
所有指针类型都占4字节(32位系统),且他们的解析方法都是相同的,都是按照地址的方式来解析。


指针数据类型转换分析(int *--->char *):
int和char的不同在于char只有一个字节而int有4个,所以在char表示的范围(0--254)时int转换成char数值不会出错,当超过char范围时就会出错。
当char转换为int时一定不会出错。
3
sizeof:c语言的一个运算符(不是一个函数)---作用:用来返回()里的变量或数据类型占用的内存字节数。
sizeof存在价值:同一种数据类型在不同平台时所占内存字节数不同(int在32位-4字节,16位-2字节)

sizeof(数组名)的数组名不做左值又不做右值,纯粹就是数组名的含义,所以sizeof(数组名)实际返回的是整个数组所占用的内存空间。


void func(int a[])--数组经过函数的传递--只是传了首元素首地址,数组的大小已经丢了,这时需要用sizeof(数组名)来将数组的内存大小传进子函数(调用函数)中
4
#define  :宏定义               #define dpchar char * 
typedef  :制造用户自定义类型   typedef char * tpchar
dpchar p1,p2;   等同于== char * p1,p2;
tpchar p1,p2; 等同于== char * p1;char * p2;
5
很多参数传参时,可以用结构体打包多个参数,传参进入子函数。


函数传参中使用const int *p的作用:不允许传参函数改变指针所指向的内容
         char *p="linux";//不可改变的指针内容


返回值有多个时(非常普遍):使用输出型参数,将参数(指针形式)传进函数,然后再作为返回值返回


一般的如果一个参数是指针形式,加const就是输入型参数,如果不加一般为输出型参数

猜你喜欢

转载自blog.csdn.net/qq_32809273/article/details/53284338
今日推荐