C语言中数组和指针的关系

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tiger_gy/article/details/88667655

                                 C语言中数组和指针的关系

* 数组占用的内存空间是连续的

* 数组变量保存的是第0个元素地址,也就是首地址

* *(p + 1):指针位移一个单位,一个单位是多少个字节,取决于指针的类型

#include<stdio.h>    
#include<stdlib.h>    
/**
数组实际上就是一块连续的内存空间 
*/
main(){
         
  // char array[] = {'a','b','c','d','\0'};
   int array[] = {1,2,3,4};
   printf("array[0]的地址%#x\n",&array[0]);
   printf("array[1]的地址%#x\n",&array[1]);
   printf("array[2]的地址%#x\n",&array[2]);
   printf("array[3]的地址%#x\n",&array[3]);
   printf("array的地址%#x\n",&array);
   //数组变量名的地址实际上是第一个元素的地址
   char* pointer = &array;
    //int* pointer = &array;
    char array2[] =  "hello from c"
   char* pointer2="hello from c";
   //printf("%s\n",pointer2);
   /*
   printf("*(pointer+0)=%c\n",*(pointer+0));
   printf("*(pointer+0)=%c\n",*(pointer+1));
   printf("*(pointer+0)=%c\n",*(pointer+2));
   printf("*(pointer+0)=%c\n",*(pointer+3));
   */
   printf("*(pointer+0)=%d\n",*(pointer+0));
   printf("*(pointer+1)=%d\n",*(pointer+1));
   printf("*(pointer+2)=%d\n",*(pointer+2));
   printf("*(pointer+3)=%d\n",*(pointer+3));
    
       system("pause"); 
       } 

指针的长度

* 不管变量的类型是什么,它的内存地址的长度一定是相同的

* 类型不同只决定变量占用的内存空间不同

* 32位环境下,内存地址长度都是4个字节,所以指针变量长度只需4个字节即可

* 区分指针类型是为了指针位移运算方便

#include<stdio.h>    
#include<stdlib.h>    
/**
32位操作系统地址总线是32位   4个字节的变量来保存32位操作系统的内存地址 1byte 8位  4*8=32 
32位操作系统 指针变量占4个字节
64位操作系统 指针变量占8个字节 
*/
main(){    
      int* pointer;
      double* pointerD; 
      printf("int类型的指针变量占%d个字节\n",sizeof(pointer));
      printf("double类型的指针变量占%d个字节\n",sizeof(pointerD));
       system("pause"); 
       } 

猜你喜欢

转载自blog.csdn.net/tiger_gy/article/details/88667655