C语言中的指针学习

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/IamSarah/article/details/79486521

今天在用C语言去验证算法的时候,回头复习了一下指针的基本知识,好久没有写过C程序了,回头再看的时候发现也是学了很多东西。这些知识都很基础,下面给大家贴出来,欢迎交流。

1. 指针的定义:由能够存放一个地址的一组存储单元构成。对于&用于取一个对象的地址,这里的对象指的是变量和数组元素,不能对表达式、常量以及寄存器变量进行操作。而对于一元运算符号*,为间接寻址或者说间接引用运算符,当它应用于指针的时候,将访问指针所指向的对象。还需要注意的是指针的定义,每一个指针对象都会有一个确定的数据类型(void类型的指针可转换成指向任何对象类型的指针,但它不能间接引用它自身),因此在定义一个指针对象的时候需要说明其数据类型。

eg int *p 表示定义了一个int型的指针对象。

另外需要注意的一点是指针也是变量,因此在程序中不需要通过间接引用的方式,可以直接使用它们进行运算。

egpq均为指向整数的指针,则下面的赋值表达式是合法的:p=q+10

2. C 语言函数值调用方式将变元传递给函数,因此被调用函数不能直接更改调用函数中变量的值。但将函数的所有形式声明为指针类型,就可以通过指针间接访问所指向的变量。

3. 下标和指针运算有着很密切的对应关系。按照定义,一个类型为数组的变量或表达式的值是该数组第0个元素的地址。

因此赋值语句为:p=&a[0],对于数组元素a[i]的引用可以写成*(a+i)这样的形式。相应的,如果p是一个指针,那么具有下标的指针p,p[i]*(p+i)含义一样。也就说一个用数组和下标实现的表达式可以等价地用指针和偏移量来实现。

下面可以编写一个函数来统计字符串的长度:

#include <stdio.h>

int length (char *s);

int main()

{

int len;

len=length("hello world");

printf("%d",len);

return 0;

}

int length (char *s)

{

int n;

for(n=0;*s!='\0';s++)

n++;

return n;

}

猜你喜欢

转载自blog.csdn.net/IamSarah/article/details/79486521