复习c语言10-13

#include <stdio.h>
#include <string.h>
//void Swap(char* buf1, char* buf2, int width)
//{
//    int i = 0;
//    for (i = 0; i < width; i++)
//    {
//        if ((char*)buf1 - (char*)buf2 > 0)
//        {
//            char tmp = *buf1;
//            *buf1 = *buf2;
//            *buf2 = tmp;
//            buf1++;
//            buf2++;
//        }
//    }
//}
//
//void bubble_sort(void* base, int sz, int width,int (*cmp)(void* e1,void* e2))
//{
//    int i = 0;
//    for (i = 0; i < sz - 1; i++)
//    {
//        int j = 0;
//        for (j = 0; j < sz - 1 - i; j++)
//        {
//            if (cmp((char*)base + j * width, (char*)base + (j + 1) * width) > 0)
//            {
//                //交换
//                Swap((char*)base + j * width, (char*)base + (j + 1) * width, width);
//            }
//        }
//    }
//
//}
//int cmp_int(const void* e1, const void* e2)
//{
//    return *(int*)e1 - *(int*)e2;
//}
//void test()
//{
//    int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
//    int sz = sizeof(arr) / sizeof(arr[0]);
//    bubble_sort(arr, sz, sizeof arr[0], cmp_int);
//    for (int i = 0; i < sz; i++)
//    {
//        printf("%d ", arr[i]);
//    }
//}
//int main()
//{
//    test();
//    return 0;
//}
//一维数组
int main()
{
    //数组名是首元素的地址,除了以下两个之外
    //1.sizeof(数组名)-数组名表示整个数组
    //2.&数组名 - 数组名表示整个数组

    int a[] = { 1,2,3,4 };
    printf("%d\n", sizeof(a));//16,sizeof(数组名)-计算的是数组的总大小-单位是字节
    printf("%d\n", sizeof(a + 0));//4/8-数组名这里表示首元素的值,a+0还是首元素地址,地址的大小就是4/8字节
    printf("%d\n", sizeof(*a));//4-数组名表示首元素地址,*a就是首元素,sizeof(*a)就是4
    printf("%d\n", sizeof(a + 1));//4/8-数组名表示首元素的值,a+1第2个元素的地址,地址的大小就是4/8个字节
    printf("%d\n", sizeof(a[1]));//4/8 第二个元素的大小
    printf("%d\n", sizeof(&a));//4/8-&a取出的是数组的地址,但是数组的地址那也是地址,地址的大小就是4/8个字节
    printf("%d\n", sizeof(*&a));//16-&a是数组的地址,数组的地址解引用访问的数组,sizeof计算的就是数组的大小,单位是字节
    printf("%d\n", sizeof(&a + 1));//4/8,&a是数组的地址,&a+1虽然跳过整个数组,但还是地址,所以是4/8个字节
    printf("%d\n", sizeof(&a[0]));//4/8,&a[0]是第一个元素的地址
    printf("%d\n", sizeof(&a[0] + 1));//4/8 &a[0]+1是第二个元素的地址
    
    //字符数组
    char arr[] = { 'a','b','c','d','e','f' };
    printf("%d\n", sizeof(arr));//sizeof计算的是数组大小,6*1=6个字节
    printf("%d\n", sizeof(arr + 0));//4/8 arr是首元素的地址, arr+0还是首元素的地址,地址的大小是4/8个字节
    printf("%d\n", sizeof(*arr));//1 arr是首元素的地址,*arr就是首元素,首元素是字符大小是一个字节
    printf("%d\n", sizeof(arr[1]));//1
    printf("%d\n", sizeof(&arr));//&arr虽然是数组的地址,但还是地址,地址大小是4/8个字节
    printf("%d\n", sizeof(&arr + 1));//&arr+1是跳过整个数组后的地址,地址大小是4/8个字节
    printf("%d\n", sizeof(&arr[0] + 1));//4/8   第二个元素的地址


    printf("%d\n", strlen(arr));//随机值
    printf("%d\n", strlen(arr + 0));//随机值
    printf("%d\n", strlen(*arr));//err
    printf("%d\n", strlen(arr[1]));//err
    printf("%d\n", strlen(&arr));//随机值
    printf("%d\n", strlen(&arr + 1));//随机值-6
    printf("%d\n", strlen(&arr[0] + 1));//随机值-1aA


    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值