C/C++学习之基础篇(一):指针

最近几天在摸鱼,所以继续学点以前学过但早就忘光的东西:指针!
指针可谓是C语言的核心,它是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址。要搞清一个指针需要搞清指针的四方面的内容:指针的类型、指针所指向的类型、指针的值或者叫指针所指向的内存区、指针本身所占据的内存区。

下面先从基础开始吧!
1、定义指针变量(变量名前加*)
首先定义一个int型的cute变量并对其进行赋值:
int cute = 10;
然后定义另一个变量dhq_pointer,利用这个变量并在其前面加一个则可以间接访问一个变量的值:
int dhq_pointer;
这个
(称之为星号)表明变量dhq_pointer是指向int类型的指针,也就是说dhq_pointer在程序中用于间接访问一个或多个int整数值。
2、地址运算符&
&是一个地址运算符,在C语言中用于使一个指针指向一个对象。因此,如果x是某种特定类型的一个变量,则表达式&x就是指向该变量的指针。所以,对于任何一个变量,如果已经将其声明为一个指针并指向与x相同的类型,就可以把&x赋值给该变量:
dhq_pointer = &cute;
这就在dhq_pointer和cute之间建立起了间接引用。地址运算符&的作用是将指向变量cute的指针赋给dhq_pointer变量。
3、间接运算符

如果要通过指针变量dhq_pointer来引用cute的内容,可以使用间接运算符,它是一个星号*。因此,如果x被定义为int类型,则语句x = *dhq_pointer可将dhq_pointer间接引用的值指定给变量x。
4、代码演示

#include<stdio.h>

int main()
{
int cute = 10;
int x;
int *dhq_pointer;

dhq_pointer = &cute; //利用&地址运算符创建一个指向cute的指针并将其赋给指针变量dhq_pointer
x = dhq_pointer; //利用间接运算符间接访问cute的值并将其赋给变量x
printf(“cute = %d ,x = %d\n”,cute, x);

return 0;
}
输出结果为:
cute = 10, x = 10

当然了这个程序也可以改写成下面这样,得到的结果是一样的

#include<stdio.h>

int main()
{
int cute = 10;
int *dhq_pointer = &cute; //通过地址运算符&将指向变量cute的指针赋给dhq_pointer

printf("%d , %d\n",cute, *dhq_pointer);

return 0;
}
输出结果为:
10, 10

这里要注意一点的就是,在表达式中引用一个变量的值比如cute的值之前一定要先声明该变量cute。

再给出一段程序如下:

#include<stdio.h>

int main()
{
int cute = 10;
int *dhq_pointer = &cute; //通过地址运算符&将指向变量cute的指针赋给dhq_pointer

printf("%d , %d\n",cute, *dhq_pointer);

cute = 8;
printf("%d , %d\n",cute, *dhq_pointer);

*dhq_pointer = 5; //将5这个值赋给dhq_pointer指针间接访问(指向)的变量cute
printf("%d , %d\n",cute, *dhq_pointer);

return 0;
}
这时候输出结果为:
10, 10
8, 8
5, 5

上面这段程序说明当cute的值发生变化时,dhq_pointer的值也会发生变化,因为dhq_pointer仍然指向变量cute。所以除非dhq_pointer的值发生变化,否则表达式dhq_pointer总是访问cute的值。

5、指针指向结构体
我们已经学习了指向基本数据类型的指针,但也可以将指针定义为指向结构体:
定义一个结构体如下:
struct date
{
int day;
int month;
int year;
};

我们可以定义一个struct date类型的变量today:
struct date today;

定义指向struct date类型的指针:
struct date *dateptr;

则可利用下面赋值语句将指针dateptr设定为指向today变量:
dateptr = &today;

这样就能间接访问dataptr所指向的date结构体的任意成员如对其进行赋值操作(注意其中的间接运算符*优先级要低于结构体成员运算符.):
(*dateptr).day = 30;

由于C语言中经常会用到指向结构体的指针,于是在C语言中提供了一个特殊运算符:结构体指针运算符->
(*dateptr).day相当于dateptr->day

6、包含指针的结构体
上面提到指针可以指向结构体类型,其实结构体也可以包含指针,直接上代码看注释:
#include<stdio.h>

struct dhq
{
int *ptr1; //struct dhq结构体包含两个指向int 类型的指针
int *ptr2;
};
int main()
{
struct dhq ptr; //定义一个struct dhq类型的变量ptr
int a = 10, b;

ptr.ptr1 = &a; //将指向变量a的指针赋给ptr1指针
ptr.ptr2 = &b; //将指向变量b的指针赋给ptr2指针

ptr.ptr2 = 30; //相当于(ptr.ptr2),表示将30这个值赋给ptr2指针指向的变量b

printf(“a = %d, *ptr.ptr1 = %d\n”,a, *ptr.ptr1);
printf(“b = %d, *ptr.ptr2 = %d\n”,b, *ptr.ptr2);

return 0;
}
输出结果:
a = 10,*ptr.ptr1 = 10
b = 30,*ptr.ptr2 = 30

未完待续~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值