qsort(快速排序 可排序整形 字符串 结构体)
头文件stdlib.h
快速排序
有四个参数
第一组
1.16 sizeof和数组名方以及是整个数组大小还有&数组名 取出的是整个数组的地址除此之外数组名都是是首元素地址
2.a没有放到arr中而是 a+0 所以只是一个地址是4 32位或8字节(平台可能不同)
3.*a是第一个元素 4
4.int*类型加1直接跳过一个元素 a+1就是第二个元素的地址4
5.4
第二组
1.&a取出整个数组的地址 但是整个数组地址还是个地址sizeof计算的是地址大小大小只能是4或8
2.&a是数组地址 在*解引用是数组 是16 解引用理解为引用指针指向的变量值,引用其实就是引用该变量的地址 也可以理解为*和&抵消
3.根据2.得实际上是数组地址加一 也就是把数组地址放入一个指针数组 指针数组加一 跳过整个数组但是还是地址而已 4或8
4.取出第一个元素地址4或8
5.4或8
第三组字符数组
1.整个数组大小 6
2.同第一组2. 4或8地址大小都是4或8与类型无关
3.a的大小 1
4.第二个元素 1
5.4或8
6.4或8跳过整个数组 如果是+2跳过12个字节
7.4或8
第四组
此中定义方法没有\0
1.首元素开始数没有\0继续往后随机值
2.首元素地址+0和1.一样
3.*arr传 字符a 是97 把97当做地址出问题了
4.传b的阿斯克马志 98 把98当做了地址传过去的不管是什么被strlen当做地址了
5.取出数组地址类型是char(*)【6】 放入strlen类型变成char* 就从开始往后数 结果随机
6.跳过一个数组再传给strlen往后数 也随机数
7.b的地址开始往后数 还是随机数
结尾有\0
1.7个字符 还有\0 七个元素每个是cahr所以是7
2.a的地址4或8
3.第一个元素 1
4.第二个元素 1
5.整个数组地址 还是地址 4或8
6.还是地址 4或8
7.第一个元素地址加一 是第二个元素地址 或8
a,b,c,d,e,f,\0
1.6遇到\0停止
2.同1. 6
3.给的是98当做了地址err
4.同3.
5.取出整个数组地址 从改地址往后数 同1. 6
6.加一跳过整个数组开始 不知道神魔时候遇到\0 随机值
7.从第二个元素开始数 5
注意类型是*char
1.字符指针大小p是a的地址 4或8
2.是b的地址 4或8
3.p指a*p指a a的大小是1
4.p[0]等价于*(p+0)还是1
5.&p是p的地址 4或8
6.加一直接跳过p的地址 还是地址4或8
7.还是地址4或8
1.p是a的地址 strlen从a开始 6
2.从b开始 5
3.把a传给strlen 97当做地址 出错
4.同3.
5.
p存的是a的地址 指向a
p是字符串的地址 但是&p(p的地址)不知道
随机值
6.跳过去 还是随机 但是和5.的随机值完全没有关系 隔了一个&p因为&p不知道
7.第一个元素地址加一 b的地址 5
1. 48 12个int 4*12=48
2. 第一行第一个元素 4
3.第一行所有元素 4*4=16a[0]单独放才是一整行
4.a[0]作为数组名没有单独放在sizeof内部 表示第一行第一个元素地址 +1是第一行第二个元素的地址 4/8.
5.由4.的 先是第一行第二个元素地址 再*拿到的是元素本身 是int 所以是4
6.a是二维数组数组名 没有取地址也没有单独放在sizeof内部 是二维数组组首元素地址也就是第一行的地址 加一跳过一行 是第二行的地址 地址 4
7.由6.得第二行地址再* 就是第二行元素总大小16
8.a[0]第一行数组名取地址取出的就是是第一行地址 +1表示第二行地址 4
9.a是二维元素首元素地址也就是第一行地址 解引用得到第一行 *a就是第一行元素 16
10. 16
如果有第四行 应该仿照前几行格式 也是一行四个 16
值属性 8 类型属性是int
而上面没有真的访问第四行 只是在意其类型属性是int 4*4=16
sizeof内部的表达式是不计算的!
虽然是整形 但是还是s说的算还是 short 第一个结果是 2
而s结果还是 5 因为sizeof内部的表达式是不计算的!
2 5