c语言指针及额外知识总结

指针一:

一.了解指针

例如 int * p;  p是指针变量,这个变量是用来存放指针(地址)的,int * 是指针的类型, p是指针的名字,*p就是地址存放的内容:p就是地址,*是解引用,*p是把这个地址的内容读取出来

二.额外知识补充

1.类型取值范围推导

char c; 它的取值范围是127~-128   ,因为char类型是占用两个字节,也就是8个比特位,所以原码可以是0111111 也就是 127,然后0111111加1就是11111111,第一位是符号位,也就是-0,但是这里是写死的,所以规定-0=-128

2.类型向上转换

这个是类型向上转换,转换成double的取值范围了,所以取值范围变大了,自然能进行准确的计算

指针二:

一.常属性const

例如 const int const * const p,被const 修饰的指针变量就是常变量,简单的讲,讲const 放在*左边就会限制*p ,就是说*p的内容不可以修改,而如果在*的右边,就会限制p,我们知道,p是地址,所以p的地址不能被修改,

正常:

const 在*左边:*p的内容不能修改

cosnt在*的右边:p即地址不能修改:

二.变长数组

C99 之前不支持变长数组,数组大小是需要常量、常量表达式来指定的,不能是变量

三.野指针

一个局部变量不初始化的话,它的值是随机的  int* p;//p是局部变量,但是没有初始化,其值是随机值的,如果将p中存放的值当做地址 解引用操作符就会形成非法访问

1类型:
2类型:

一个是形参原因,退出就把空间销毁了导致的

3类型

第二个是  NULL,没给明确的地址

四.传值调用 传址调用

传值调用 :不改变值

传址调用:会改变对应的值

五.assert

#define NDEBUG 这个跳过assert 检测的代码

指针三

一.必要知识

  数组名是数组首元素的地址但是有两个例外就是sizeof(arr) 和 &arr,它们是整个数组的地址

二.指针的输入输出方式

*(p+i)可以替换为*(arr+i)  arr[i]可以替换为i[arr]也就是*[i+arr];

三.数组指针  指针数组

数组指针的函数类型是int (*)[ ]  指针数组的类型是 int * [ ]

数组指针简单示例

指针数组

区分指针数组,小编认为看int * 和int 就行,因为int *是指针的标志嘛,所以有int *的就是指针数组

四.函数指针

这里pf和(*pf)  ,取决于作者喜好,都可以

指针四

一.二维数组的打印

二.qsort 函数

回调函数
qsort是c语言中的一个库函数,这个函数是对数据排序,对任意类型的数据都能排序    
qsort默认是升序

qsort的基本排序,void(void*base,size_t num,size_t size,int(*cmp)(const void *,const void *))
第一个是指向待排序的第一个元素的指针
第二个是base指向元素中的个数
第三个是base指向数组中的一个元素的大小,单位是字节
第四个是函数指针,传递函数的地址

三.题目

注意:内容涉及8的答案就是涉及打印地址,如果系统是X64就是8,系统是X32

1.

2.

3.

4.

5.

6.

7.

8.

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值