C语言指针详解及用法示例

2020-01-06 17:46:52刘景俊


int a=10,b=20;
int * const p=&a;  //无法使p指向其他地址。
p=&b;          //这样的操作是不允许的。
*p=20;          //可以这样操作。

const int * p=&a;   //p可以指向其他地址。
p=&b;           //可以操作。
*p=10;           //操作不被允许。

const int * const p=&a  //p不能指向其他地址,也不能改变地址中的值。
p=&b;           //操作不被允许。
*p=20;           //操作不被允许。

       const在int的左边那就是不能修改地址中的值,在右边就是不能指向其他地址,左右都有那就是既不能修改地址的值也不能指向其他地址。 

       新手常出现的问题我个人总结了上述几点,如果有错误的地方希望大家留言交流互相学习。后面会写下多维数组的存储方式和指针的问题。

下面简单介绍下c语言指针的几种用法。

1、指针指向变量:
下面有这样一个代码块:


int main()
{int a=10;int b=15;test(a,b);printf("a=%d,b=%dn",a,b);}
void test(int x,int y)
{int tmp;tmp=x;x=y;y=tmp;}

最后输出的结果还是a=10,b=15。因为在函数调用时,实参和形参之间只是值传递。但我们使用指针结果就不一样了,如:


int main()
{int a=10;int b=15;test(&a,&b);printf("a=%d,b=%dn",a,b);return 0;}
void test(int * x,int *y)
{int tmp;tmp=*x;*x=*y;*y=tmp;}

输出结果a=15,b=10。变量a和b的值发生了交换。这是因为我们利用指针访问变量的存储单元,间接修改变量的值。

2、指针指向数组:

定义一个数组并初始化,int array[5]={2,5,12,7,8},定义一个指针变量并把数组的地址赋给它,int *p=array,注意数组名就是数组的地址,而且数组的地址就是首元素的地址。因此我们的指针变量就指向了数组的首元素,*p=2。如果把(p+1),那么指针变量就指向了数组的下一个元素5,因此我们可以利用指针来遍历数组的各个元素:


int main()
{int array[5]={2,5,12,7,8};int *p =array;for(int i=0;i<5;i++){printf("array[%d]=%dn",i,*(p+i));}return 0;}

3、指针指向字符串:

我们都知道用数组存储字符串,如char name[20]="jack",上面已经简单讲述了指针指向数组,所以我们可以这样做,char *name="jack",指针变量指向字符串的首个字符并可以依次访问字符串的各个字符。

4,指针指向函数:

我们需要知道怎样表示一个指针指向函数,说白了就是语法要正确,下面我也取一个代码块来说明一下:


int sum(int x,int y)
{return x+y;}
int main()
{int a=5;int b=6;int (*p)(int,int);p=sum;int result=(*p)(a,b);printf("The result is %dn",result);return 0;}