指针与指针变量

来源:互联网 发布:新加坡莱佛士书院知乎 编辑:程序博客网 时间:2024/06/05 03:55

指针即地址,学习指针首先要知道指针与指针变量的区别。

指针和指针变量是两个概念,指针即是地址,而指针变量是存放地址的变量。

在c语言中&x表示x的地址,*(&x)表示取出该地址单元的内容,即x变量的值。写到这里我就想到了scanf(“%d”,&x),输入时正是给出了x的地址,向该地址指向的空间存储输入的内容。

指针变量的一般形式如下:

类型名 * 指针变量 [=初始值];

注意:指针变量中的内容存的是普通变量的地址,指针变量是占内存空间的。

int *point;

point 中的值是一个随机地址,再定义一个指针变量时可以对指针变量进行初始化,如下:

int x=6;int *point = &x;

或者将指针变量初始化为NULL:

int *point = NULL;

NULL是一个不指向任何内存位置的值,对于指针他表示0;

下面看一段程序,此程序段说明了指针与运算符 ++ 如何连用:

#include<stdio.h>int main(){    int num=10;    int *pointer=&num;     printf("num = %d,  *pointer=%d \n",num,*pointer);    *pointer+=15;    printf("num = %d,  *pointer=%d \n",num,*pointer);    printf("输入一个整数:\n");    scanf("%d",pointer);    printf("num = %d,  *pointer=%d \n",num,*pointer);    ++*pointer;    printf("num = %d,  *pointer=%d \n",num,*pointer);    return 0;}

(一)、指针变量指向普通变量,则可通过指针来修改变量的值。

(二)、int *pointer=&num是将num的地址赋给了指针变量pointer,所以在输入函数中可以用pointer代替&num。这里要注意一点,如果自增运算符放在*pointer之后,一定要这样写(*pointer)++,否则*pointer++递增的不是num的值,而是pointer的值。pointer是指向int型的指针,所以自增一,其值会增加sizeof(int)字节,不能理解成简单的加1。


指针变量用作函数参数:

函数参数也可以是指针类型,他的作用是将一个变量的地址传送到另一个函数中。这里就牵扯到值传递和地址传递两种参数传递方式,值传递不会影响主调函数中实参的值,若要改变实参的值就要采用地址传递。通过地址传递,被调函数就可以通过地址直接操作实参的值。