指针入门必看!!!指针的详细解析

1.指针跟一般变量的区别
变量是用来存储数据的数据类型,它们实际上是一个地址,地址里存的数据就是变量储存的值。你用scanf来对一个变量(比如a)进行赋值: scanf("%d", &a); &a表示变量a的地址,这里的意思也就是输入一个数然后把这个数存在一个叫a的变量的地址里面。这里还有另外一种方法可以给a赋值。 int *b = &a; scanf("%d",b). 因为scanf的参数是("一个数", 目的地变量的地址).

而指针是一个特殊变量,也存在堆栈里面,但是它们存储的数据却是另一个变量的地址。 比如
int b = 1; int *a = &b; 这里表示定义一个变量然后它存的值是变量b的地址。那么a = (b的地址), *a =(b的地址存储的值(也就是1)) 。 而你定义指针变量时输入的指针变量类型 int * float* double* char* 取决于它指向的普通变量的数据类型。

2.二级指针
int a = 1; int * b = &a; int **c = &b;
这里定义一个指针b 用来存储a的地址, c是二级指针用来存储b的地址。 那么 c = (b的地址), *c = (b的地址存储的值,也就是b,也就是a的地址), **c =(b的地址存储的地址的值,也就是*b, 也就是a存储的值)

3.代替数组
int a[3] = {1,2,3};
int *b = a;
b = &a[0], *b = a[0], b+1 = a[1], *(b+1) = a[1],(b+2) = a[2],*(b+2) = a[2]

int a[3][3] = {{1,2,3},{4,5,6},{7,8,9}}
int *b[3];
int **c;
b = a ====> b = a[0], b = {1,2,3}
b = a; b[1] = a[0][1];

c = a; c = {{1,2,3},{4,5,6},{7,8,9}} c[1] = a[1] = {4,5,6}
c[2][2] = a[2][2]

 

 

希望可以解决你的疑惑!!!

 

posted @ 2015-10-28 19:32  小魔浩  阅读(177)  评论(0编辑  收藏  举报