指针变量

本文介绍了变量在内存中的存储方式及指针的基本概念。详细解释了如何使用取址和取值运算符,并强调了指针类型的重要性。

我们都知道,变量是存在内存中的某个地方,每个变量在内存中都对应着一个内存地址。普通的变量存储的都是程序中用到的数值,而指针变量中存储的则是一个内存地址,这个内存地址就会对应着一个变量。
1、首先来认识两个运算符
& 取址运算符
* 取值运算符
2、定义普通变量:
int num;
float value;
定义指针变量:
int *pnum;
int *pvalue;
3、给指针变量赋值:
num = 56;
pnum = & num; //在这里,通过取地址运算符,我们把num变量的地址赋值给pnum这个指针变量
4、利用取值运算符,我们就可以通过取指针变量的值来找到它指向的对应的变量
*pnum = 66;
这句代码相当于:
num = 66;
5、注意一点的是,指针也是有类型的,同类型的指针才能指向同类型的数据,例如不能用一个float 类型的指针去指向一个int 类型的变量。

### 指针变量 指针变量是一种特殊的变量类型,用于存储内存地址。为了表示指针变量和它所指的变量之间的联系,在程序中用“*”表示“指向”,如果定义变量 i 为指针变量,那么 *i 就表示指针变量 i 里面存放的地址所指向的存储单元里面的数据[^3]。 指针变量可作为数组成员(指针数组)、函数参数、和函数返回值(指针函数),甚至可以作为保存数组地址(数组指针)或函数地址的变量(函数指针)。同时,指针变量可进行一些运算操作。指针变量的定义需要使用特殊符号“*”表明,定义时必须带上,而赋值时则不必。之后可以像使用普通变量一样来使用指针变量[^1][^4]。 在C语言中,一个函数总是占用一段连续的内存区,而函数名就是该函数所占内存区的首地址。可以把函数的这个首地址(或称入口地址)赋予一个指针变量,使该指针变量指向该函数,这种指向函数的指针变量称为“函数指针变量”,通过它可以找到并调用这个函数[^5]。 ### 成员变量 成员变量通常是指结构体或类中的变量。在C语言中,结构体是一种用户自定义的数据类型,它可以包含多个不同类型的变量,这些变量就被称为成员变量。例如: ```c struct Person { char name[20]; int age; double score; }; ``` 在这个结构体 `Person` 中,`name`、`age` 和 `score` 就是成员变量。 ### 指针变量和成员变量的区别 - **本质不同**:指针变量存储的是内存地址,而成员变量是结构体或类中的具体数据项。 - **用途不同**:指针变量主要用于间接访问内存中的数据、实现动态内存分配、作为函数参数传递地址以实现数据的修改等;成员变量用于描述结构体或类的属性。 ### 指针变量和成员变量的使用方法 #### 指针变量的使用 ```c #include <stdio.h> int main() { int num = 10; int *p; // 定义指针变量 p = &num; // 指针变量赋值 printf("num 的值: %d\n", *p); // 通过指针变量访问数据 return 0; } ``` #### 成员变量的使用 ```c #include <stdio.h> #include <string.h> struct Person { char name[20]; int age; double score; }; int main() { struct Person p; strcpy(p.name, "Bob"); // 访问成员变量并赋值 p.age = 30; p.score = 85.5; printf("Name: %s\n", p.name); // 访问成员变量并输出 printf("Age: %d\n", p.age); printf("Score: %lf\n", p.score); return 0; } ``` #### 使用指针变量访问成员变量 ```c #include <stdio.h> #include <string.h> struct Person { char name[20]; int age; double score; }; int main() { struct Person p; struct Person* pp; pp = &p; strcpy(pp->name, "Bob"); // 使用 -> 访问结构体成员 pp->age = 30; pp->score = 85.5; printf("Name: %s\n", pp->name); printf("Age: %d\n", pp->age); printf("Score: %lf\n", pp->score); return 0; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值