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

原文地址:https://www.cnblogs.com/9527s/p/10280071.html