关于指针的详细讲解

时间:2022-07-24
本文章向大家介绍关于指针的详细讲解,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

通俗的将指针就是地址,指针变量就是存储地址的变量。

一个简单的指针变量的声明:

int *p;

上述声明p是指向int类型对象的指针变量。

一、取地址运算符:

声明指针变量是为指针留出空间,但是并没有把它指向对象:

int *p;

在使用前初始化p至关重要。

一种初始化指针变量的方法是使用&运算符把某个变量的地址赋给它。

int i,*p;
p=&i;

通过把i的地址赋值给变量p的方法,描述为把p指向i;

Q&A:在声明指针变量的同时对它进行初始化也是可行的:

int i;
int *p=&i;
或者
int i,*p=&i;

二、间接寻址运算符

一旦指针变量指向对象,就可以使用*运算符访问存储在对象中的内容。例如p指向i,那么可以写出显示i的值:

printf("%dn",*p);

Q&A:printf函数显示i的值,而不是i的地址。

只要p指向i,*p就是i的别名。*p不仅拥有和i相同的值,而且对*p的改变也会改变i值。(*p是左值,随意对它赋值是合法的)。

不要把间接寻址运算符用于位初始化的指针变量。

三、指针赋值

C语言允许使用赋值运算符进行指针的复制,前提是两个指针具有相同的类型:

int i,j,*p,*q;
p=&i;//把i的地址复制给p
q=p;//把p的内容(i的地址)复制给q,效果是把q指向了p所指向的地方

注意不要把

q=p;
*q=*p;

这两个搞混了。第一条指针赋值,而第二条不是,举个例子:

p=&i;
q=&j;
i=1;

*q=*p;

赋值语句*q=*p是把p指向的值复制到q指向的对象(变量j)中。

四、指针的运算

int a[10],*p,*q,i;
p=&a[2];
q=p+3;
p+=6;

五、用数组名作为指针

用数组名作为指向数组第一个元素的指针。

int a[10];

*a=9;//等价于a[0]=9;

*(a+1)=12;//等价a[1]=12;

数组名可用指针这一事实使得编写遍历数组的循环更容易。

六、自家封装的一个连接字符串函数

char *concat(const char *s1,const char *s2)
{
  char *result;
   
  result = malloc(strlen(s1)+strlen(s2)+1);
  if (result == NULL)
    exit(EXIT_FAILURE);
  strcpy(result,s1);
  strcat(result,s2);
  return result;
}

注意,函数空间的释放;