目录
  • 指针和数组:
    • 示例:
  • 总结

    指针和数组:

    数组名其实是数组第一个元素的地址。
    %p用来打印地址,为十六进制
    &:取址操作符
    

    如果用一个指针指向数组,应该怎么做呢?

    • char *p;
    • p=a;//语句1
    • p=&a[0];//语句2

    指针的运算:

    • 当指针指向数组元素的时候,我们可以对指针变量进行加减运算,这样做的意义相当于只想距离指针所在位置向前或向后第n个元素。
    • 对比标准的下标法访问数组元素,这种使用指针进行间接访问的方法叫做指针法。
    • 需要郑重强调的是:p+1并不是简单的将地址加1,二十只想数组的下一个元素。

    linux命令:12s/a/b/g:把第十二行的所有a替换为b

    示例:

    例一:

    从标准输入流读取字符需要取址操作符(scanf),并且用&来址

      #include<stdio.h>
       int main()
       {
           int a;
           int *p=&a;
           
           printf("请输入一个整数:");
          scanf("%d",&a);
     
          printf("a=%d\n",a);                              
                                                                                    
          printf("请重新输入一个整数");
         scanf("%d",p);                            
          printf("a=%d\n",a);
                               
                                              
     
        return 0;                                                        
      }  
    

    例二:

    得出数组名是一个地址信息

       #include<stdio.h>
       int main()
       {
         char str[120];
         printf("请输入鱼C的域名:");
         scanf("%s",str);
       
         printf("鱼C工作室的域名是:%s\n",str);
      
        return 0;
      }
    

    例三:

    得出数组名其实是数组第一个元素的地址!

       #include<stdio.h>
      int main()
       {
         char str[120];
         printf("请输入鱼C的域名:");
         scanf("%s",str);
      
       //printf("鱼C工作室的域名是:%s\n",str);
      
      printf("str的地址是:%p\n",str);
        printf("str的地址是:%p\n",&str[0]);
      
       return 0;
     }
    

    例四:

    得出数组中的元素地址依次排列,元素空间相同按类型所占字节数排列

       #include<stdio.h>
       int main()
       {
         char a[]="fishc";
         int b[5]={1,2,3,4,5};
         float c[5]={1.1,2.2,3.3,4.4,5.5};
         double d[5]={1.1,2.2,3.3,4.4,5.5};                 
                                           
        printf("a[0]->%p,a[1]->%p,a[2]->%p\n",&a[0],&a[1],&a[2]);
       printf("b[0]->%p,b[1]->%p,b[2]->%p\n",&b[0],&b[1],&b[2]);
        printf("c[0]->%p,c[1]->%p,c[2]->%p\n",&c[0],&c[1],&c[2]);                    
       printf("d[0]->%p,d[1]->%p,d[2]->%p\n",&d[0],&d[1],&d[2]);
                                              
        return 0;            
      }
    

    例五:

    得出数组中的元素地址依次排列,元素空间相同按类型所占字节数排列

       #include<stdio.h>
       int main()
       {
         char a[]="fishc";                                                            
        int b[5]={1,2,3,4,5};
         float c[5]={1.1,2.2,3.3,4.4,5.5};
         double d[5]={1.1,2.2,3.3,4.4,5.5};
      
        int *p=b;
        printf("*p=%d,*(p+1)=%d,*(p+2)=%d\n",*p,*(p+1),*(p+2));
        printf("*b=%d,*(b+1)=%d,*(b+2)=%d\n",*b,*(b+1),*(b+2));
      
        printf("a[0]->%p,a[1]->%p,a[2]->%p\n",&a[0],&a[1],&a[2]);
       printf("b[0]->%p,b[1]->%p,b[2]->%p\n",&b[0],&b[1],&b[2]);
        printf("c[0]->%p,c[1]->%p,c[2]->%p\n",&c[0],&c[1],&c[2]);
        printf("d[0]->%p,d[1]->%p,d[2]->%p\n",&d[0],&d[1],&d[2]);
      
      return 0;
      }
    

    例六:指针变量直接定义并赋值字符串

         #include<stdio.h>
         #include<string.h>
         int main()
         {
           char *str="i love fishc.com!";
           int i,length;
          length=strlen(str);
           for(i=0;i<length;i++)
           {
            printf("%c",str[i]);                                                     
          }
          printf("\n");
        
        
        return 0;
        }
    

    总结

    本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注的更多内容!  

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。