二. 指针基本知识

173 阅读1分钟

例一(基本指针)

#include <stdio.h>

int main()
{
	int * p;          //int * 是变量名p的类型,表示存放int类型的地址 
	int i = 1; 
	
	p = &i;           // p保存了i的地址, p就指向i
        *p = *p + 1;      // p指向i, *p 就是i,所有出现*p的地方都可以替换成i, 反之亦然 
        i++;
    
        printf("i=%d,*p=%d", i, *p);
    
	return 0;
}

注意:

  1. p不是i, i不是p

  1. 若p 指向了 一个普通变量
*p 就是这个普通变量 

  1. *p 最准确的解释:
p的内容为地址的变量 ,在C++中是解引用的操作,通过P来操纵i这块内存

例二(指针和一维数组)

#include <stdio.h>

void f(int * array, int len);

int main()
{
	int a[6] = {1, 2, 3, 4, 5, 6};
	
	f(a, 6);                   //a == &a[0](即第一个元素的地址)
	
	printf("%d", a[4]);        //a[4] == *(a + 4) == array[4] == *(array + 4) 

	return 0;
}

void f(int * array, int len)   //array和a同时指向a[0],即array == a 
{
	array[4] = 66;             //等于修改了a[4] 的值 
	printf("%d", a[4]);
}


例三(多级指针)

#include <stdio.h>

//搞懂注释多级指针就差不多了 

int main()
{
	int i = 10;
	int * p = &i;
	int ** q = &p;
	int *** r = &q;         // *r == q         以r的内容为地址的变量 
				// **r == *q == p
				// ***r == *p == i
	printf("%d", ***r);
	
	return 0;
}

注:

1 .

i是int类型,&i是int*类型

p 是int*类型,&p是int**类型

q 是int**类型,&q是int***类型

r 是int***类型,&r是int****类型 

2 .

int * p: p存放int 类型的地址 

int ** q: q存放int * 类型的地址 

int *** r: r存放int ** 类型的地址