zoukankan      html  css  js  c++  java
  • c语言指针浅理解

    指针指向一个地址用*作为解引用运算符进行解引用

    声明可以是

    int *pi;

    char *pc;

    float * pf, *pg;

    1 int nurse = 22;
    2 int * ptr;
    3 ptr = &nurse;  //指针是指向地址,指向nurse的指针
    4 val = *ptr; //解引用,把nurse地址处的值赋给val

    指针输出有专门的%p  输出为十六进制,虽然%x也是十六进制,但两者是不同的,指针输出用%p

    指针的值是它指向对象的地址,指针加一,指针的值递增它所指向类型的大小

    例如 int * p;

    p指向一个地址,以%p的方式输出是一个十六进制的值,再以同样方式输出p+1,结果比p的结果大4

    因为int类型占四个字节,p+1是将p地址加一个int类型大小

    函数中使用指针

    如果要用函数计算数组中所有值的和可能用

    total = sum(marbles);

    则函数中的形参类型应该是指针,因为实参marbles是数组首元素的地址,指针也是取地址;

     1 int sum(int * ar, int n)
     2 {
     3 
     4     int total = 0;
     5     for(int i = 0;i < n; i++)//n是指数组元素个数
     6   {
     7       total += ar[i]; //ar[i]和*(ar+i)等价
     8   }  
     9 
    10 return total;
    11 }

     数组中指针求差

       两个指针之差的差值是两个元素的距离,差值单位和数组类型的单位相同;

    例如

     1 # include<stdio.h>
     2 int main(void)
     3 {
     4 
     5  int ar[5] = {1,5,8,7,6};
     6  int *p1,*p2;
     7  p1 = ar;//指向ar数组首元素地址
     8  p2 = &ar[4];
     9  printf("%p,%p,%d
    ",p1,p2,p2-p1);
    10 
    11  return 0;
    12 }

    结果

    差的结果为4,意思是两个指针指向的元素差4个int类型,不是四个字节

     因为指针使得数据容易被修改,为了安全在数据前加const

    多个函数处理一个数据在不需要修改数据的函数形参加const

  • 相关阅读:
    iOS 使用GRMustache对HTML页面进行渲染
    算法 -- 排序
    ios 笔记
    ios 开发视图界面动态渲染
    Python环境变量设置
    Excel2010: Excel使用小技巧(不断更新)
    C: Answers to “The C programming language, Edition 2”
    VBScript: Windows脚本宿主介绍
    VBScript: 正则表达式(RegExp对象)
    VBScript Sample:遍历文件夹并获取XML文件中指定内容
  • 原文地址:https://www.cnblogs.com/9527s/p/10280071.html
Copyright © 2011-2022 走看看