指针相关知识

1.指针:内存地址

指针变量:专门用一个变量来存放指针,这种变量成为指针变量。因此,一个指针变量的值就是某个内存单元的地址(或指针)

“指针”是指地址,是常量,“指针变量”是指取值为地址的变量

2.二级指针

指针变量中主要存放目标变量的地址,这种指针称为一级指针。如果指针变量中存放的不是变量的地址,而是存放一级指针变量的地址,则这种指针称为二级指针。

格式:

【存储类型】  数据类型符    **变量名;

例如:

int a=5;

int *p1;

int **p2;

p1=&a;

p2=&p1;

**p2=5;

例子:利用二级指针来处理字符串

#include <stdio.h>

#define NULL 0

void main()

{

   char **p;

   char *name[]={"hello","good","world","bye"," "};

   p=name+1;

   printf("%x:%s  ",*p,*p);

   p+=2;

   while(**p!=NULL)

     printf("%s ",*p++);

}

运行结果:42003C:good  bye

解释:第一个*p是输出p所指向的指针的地址(以十六进制形式%X输出),即字符串“good”的首地址。第二个*p是输出p的内容(即name[1])所指向的字符串(即"good")

二级指针与指针数组的关系

如:int **p;与*q[10];之间的关系

指针数组名是二级指针常量;

p=q;p+i是q[i]的地址;

指针数组作形参时,int*q[]与int**q完全等价;但作为变量定义两者不同;

系统只给p分配能保存一个指针值得内存区;而给q分配10块内存区,每块可保存一个指针值

重剑无锋,大巧不工
原文地址:https://www.cnblogs.com/919czzl/p/4039145.html