• 数组


    数组的表达形式:  类型   数组名[常量表达式]  如:int arr[10];char brr[10];

    对数组名和数组地址的测试//以下每次运行地址都是随机值,函数每次进栈都会有不同的地址,但地址关系一样

    #include <stdio.h>
    #include <string.h>
    //数组名是数组首元素的地址 &a==a(值相同,类型不同);sizeof(a)==数组的大小,sizeof(&a)==指针的大小;
    //*a==2; &a+1==数组整体加一;a+1==a[1];

    int main()
    {
    int a[] = { 2, 3, 4, 5 }; //&a=int[4]* a=int[4]
    printf("%d ", &a);//11532432                                                   &a :数组的地址
    printf("%d ",&a[3]);//11532432+4*3                                         &a[3] :a[3]的地址
    printf("%d ", a); //11532432                                                     a :数组首元素的地址  
    printf("%d ", *a);//2                                                                  *a :数组首元素
    int *ptr1 = (int *)(&a + 1);                                                         &a+1 :加整个数组大小字节
    printf("%d ",*a); //2                                                             
    printf("%d ", *(&a)); //11532432                                           *(&a) : 数组首元素的地址取地址后再解引用 (?)
    printf("%d ", &a); //11532432                                                 
    int *ptr2 = (int *)((int)a + 1);//后移1个字节                   
    printf("%d ",a);//11532432                                                         a:强转后*a的值
    printf("%d ", *a);//2                                                                     *a:强转后竟还可以使用(感觉不太科学,这样随意遍历数字的地址不就很危险了吗)  
    printf("%d ", ptr2);//11532433   
    int *ptr3 = (int *)(a + 1);//后移4个字节
    printf("%d ", ptr3);//11532436
    printf("0x%d ,0x%d ,0x%d ", ptr1[-1],ptr3[-1], *ptr2);// 0x5 ,0x2, 随机值
    printf("%d ", a[4]);//数组越界产生随机值
    printf("%d ",sizeof(a));//16                                                         sizeof(a)):数组的大小
    printf("%d ", sizeof(&a));//4                                                       sizeof(&a)):指针的大小

    for (int i = 0; i < 10000000; i++)                             //由上面想到便试了一下,结果根本不会有对应地址的值,至于为什么
    {
    int *b = (int*)(i + 4);
    printf("%d ", *b);

    }

    return 0;
    }

    /*
    int main()
    {
    char array[] = "hello world";
    char *p = array;
    printf("%d ", strlen(array));//11
    printf("%d ", sizeof(array));//12
    printf("%d ", strlen(p));//11
    printf("%d ", sizeof(p));//4
    return 0;
    }
    */

    数组和指针数组 数组名的含义
    /*
    int main()
    {
    int intArray[] = { 12, 4, 56, 7, 8, 90, 41 };//数组
    char *strArray[] = { "hello", "world" };//指针数组
    //请定义指针指向以下给定的表达式
    int*p1= intArray;
    int(*p2)[7]= &intArray;
    char**p3= strArray;
    char*(*p4)[2]= &strArray;
    printf("%d ",*intArray);//12
    printf("%d ", intArray[6]);//41
    printf("%d ", *(intArray+0));//12
    printf("%d ", intArray[0]);//12

    printf("%d %d %d %d ", sizeof(intArray), sizeof(&intArray[0]), sizeof(intArray + 0), sizeof(intArray[0]));
    // 4*7 4 4 4
    printf("%d %d %d ", sizeof(strArray), strlen(strArray[0]), sizeof(strArray[0]));
    // 4*2 5 4
    return 0;
    }
    */

  • 相关阅读:
    iframe 的自适应高度
    在repeater、datalist控件中使用分页功能
    多语言网站开发:不完全技术分析
    提高ASP.Net应用程序性能的十大方法
    使用ASP在线解压rar文件
    在C#程序设计中使用Win32类库
    FCKeditor 2.0 的设置.修改.使用
    Windows Server 2003 四种版本的区别
    在ASP中应用FCKeditor2.1.1
    获得汉字的拼音首字母源代码
  • 原文地址:https://www.cnblogs.com/xcb-1024day/p/10958305.html
Copyright © 2020-2023  润新知