zoukankan      html  css  js  c++  java
  • 蓝桥杯老师说指针

     1 //数组和指针互换问题 
     2 //char *的一些特殊性 ,主要是'\0'要占一个字节 
     3 //指针类型本质就是整数,可以无损保存和恢复类型 
     4 //传递参数的时候会损失size信息 
     5 #include <stdio.h>
     6 
     7 void f(int x[])//数组做参数的话是被完全当做指针使用的 
     8 {//不论 x的参数是几,打印的结果都是4 
     9     printf("%d\n",sizeof(x));
    10 }
    11 
    12 int main(int argc, char *argv[])//和char **argv 完全一样 
    13 {
    14     int a[] = {1,2,4};
    15     int *b;
    16     
    17     //下面这三个一致 
    18     printf("%d\n",a);
    19     printf("%d\n",&a);
    20     printf("%d\n",&(a[0]));
    21     
    22     b = a;//那么此时b和a是等效的,像数组一样使用b,像指针一样使用a
    23     
    24     //C语言中数组的作用被大大弱化了,很多都是按照指针的操作进行的 
    25     *(a+1) = 100; 
    26     
    27     printf("%d\n",sizeof(b));//4
    28     printf("%d\n",sizeof(a));//12
    29     
    30     printf("-----------------------------------\n");
    31     
    32     char str[] = "abc";//指针可以访问到0123,到三并没有越界
    33     char *ch = "abc";//打印ch和&ch是不同的 
    34     
    35     str[0] = 'x';//没问题 ,栈空间 ,串在栈里 
    36     ch[0] = 'x'; //有问题,编译通过,运行失败 ,因为串分配在静态常量空间 
    37     printf("%d\n",sizeof(str));
    38     
    39     
    40      printf("-----------------------------------\n");
    41      
    42      int b[] = {1,2,3};
    43      char *p = "abc";
    44      int a = (int)p;//必须强转,否则CE 
    45      char *q = (char *)a;
    46      //先打印b的地址,记住它(整形ans保存),然后int p = (int *) ans,没问题的;
    47      //也就是说C指针提供了很大的灵活性 ,允许程序员对任意地址操作 
    48      
    49      printf("-----------------------------------\n");
    50      int c[] = {1,2,3};
    51      printf("%d\n",sizeof(c));
    52      f(c);
    53      
    54     //while(1);
    55     return 0;  
    56 }
    57 
    58  
  • 相关阅读:
    [CSAPP笔记][第一章计算机系统漫游]
    [暂停学习几天]
    [汇编学习笔记][第十七章使用BIOS进行键盘输入和磁盘读写
    [汇编学习笔记][第十六章直接定址表]
    [汇编语言学习笔记][第十五章 外中断]
    [汇编学习笔记][第十四章 端口]
    [汇编学习笔记][第十三章int指令]
    [汇编学习笔记][第十二章内中断]
    [汇编学习笔记][第十一章标志寄存器]
    [汇编学习笔记][第十章 CALL和RET指令]
  • 原文地址:https://www.cnblogs.com/hxsyl/p/3052787.html
Copyright © 2011-2022 走看看