C语言讲义——指针(pointer)

指针是C语言最重要的特性之一,
也是最容易被误解的特性之一。


现代计算机把内存分割为字节(Byte),
每个字节都有唯一的地址(Address),
如果内存中有n个字节,可以把地址看做0~n-1的数。

程序中的每个变量都占据字节(至少1字节),把第一个字节的地址称为”变量的地址”,
假设变量int i占有内存2000~2003,则变量i的地址是2000。

指针变量(pointer variable)

口诀:
变量有位置,位置有地址
指针是变量,其值为地址

指针就是地址,指针变量就是存储地址的变量。
C语言要求每个指针变量只能指向一种特定的类型的对象。

int *p;
double *q;
char *r;

指针变量的赋值:

int i=2099;
int*  p;
P = &i;
printf("%d", *p);

值和地址

&取地址运算符
*间接寻址运算符

下例中:

i是普通变量,&i是存储变量的地址
p是指针,是地址,*p是指针指向地址的值

#include <stdio.h>
main() {
    int  i=2099;
    printf("变量的值:%d
", i  );
    printf("变量的地址:%x
", &i  );

    int *p;
    p = &i;
    printf("指針(值):%d
", *p  );
    printf("指針(地址):%x
", p  );
}

NULL指针

在变量声明时,如果没有确切的地址可赋值,为指针变量赋一个NULL值是一个良好的编程习惯。
赋为NULL值的指针称为“空指针”。

#include <stdio.h>
int main(int argc, char *argv[]) {
	int  *ptr = NULL;
	printf("ptr的值是:char=%x, int=%d
",ptr,ptr);

	return 0;
}

运行结果:

ptr的值是:char=0, int=0
原文地址:https://www.cnblogs.com/tigerlion/p/11191576.html