C语言复习 指针和数组

#include <stdio.h>    
#include <stdlib.h>
// 数组是一块连续的内存空间  数组名 就是内存空间的首地址 
// 数组名[i]  ==  *(数组名+i); 
 main() 
{  
            /* char[] arr = new char[20]; 
             char arr[] ; 
             */
             // 创建一个长度为5的int类型的数组  
            int arr[5] ={1,2,3,4,5};
            
            printf("a[0]=%d\n",arr[0]);
             
        
            printf("a[4]=%d\n",arr[4]);
        
             // 逻辑上是错误的代码  数组下标越界  
            // printf("a[5]=%d\n",arr[5]);
            // windows xp   缓冲区越界补丁  
            
            
            // arr是一个什么东西呢? 
            printf("arr = %#X\n",arr); 
            
            // 回答:打印 数组的第一个元素的地址 
            printf("arr[0]地址 = %#X\n",&arr[0]); 
            
            // 打印数组中的第二个元素 
            printf("arr[1]=%d\n",arr[1]); 
            printf("arr[1]=%d\n", *(arr+1));
            //问题: arr[i]  *(arr+i)  代表的是同一个变量么? 
            // 代表的是同一块内存空间 指向的是同一个变量  
            
            
            //通过实验 : 数组名表示的 就是这个数组第一个元素 的首地址 
        
               system("pause");    // 调用windows下系统的命令 让程序暂停执行  方便观察程序的执行结果  
          
          
}



#include <stdio.h>    
#include <stdlib.h>
 main() 
{  
        int i =3;  //天津的某个路上 盖了一个房子 3 
        int j =5;  // 北京的某个路上 盖了一个方法 5 
        int* p = &i; // p 天津的门牌号 
        int* q = &j; // q 北京的门牌号 
        
       
        // 指针的运算和数组都是紧密关联的 
        char arr[5]={'a','b','c','d','e'};  //一块连续的内存空间 
        
        char* p1 = &arr[2];
        printf("char = %c\n", *(p1-1));
        
        // char 内存中占用 1个字节 
        // int 内存 中占用 4个字节  
        
         int intarr[5]={1,2,3,4,5};  //一块连续的内存空间 
        
        int* q1 = &intarr[2];
        printf("char = %d\n", *(q1-1));
        
        
        
        // 指针的运算 按照 约定好的数据类型   偏移相对应的内存空间的大小  
        
        system("pause");    // 调用windows下系统的命令 让程序暂停执行  方便观察程序的执行结果  
    
}


posted @ 2012-11-08 16:50  sfshine  阅读(172)  评论(0编辑  收藏  举报