C语言自学笔记11----C语言指针

C语言指针
指针是 C和C ++ 编程的强大功能。

C 语言地址
如果程序中有变量var,则&var将在内存中提供其地址。

#include <stdio.h>
int main()
{
int var = 5;
printf(“var: %d\n”, var);

// 注意在var之前使用&
printf(“address of var: %p”, &var);
return 0;
}
输出结果
var: 5
var地址: 2686778
注意:运行上面的代码时,您可能会获得其他地址。
C 语言指针
指针(指针变量)是用于存储地址而非值的特殊变量。

指针语法
这是我们如何声明指针的方法。
int* p;
在这里,我们已经声明了一个int类型的指针p。
您也可以通过以下方式声明指针。
int p1;
int * p2;
让我们再举一个声明指针的实例。
int * p1, p2;
在这里,我们声明了一个指针p1和一个普通变量p2。
给指针分配地址
让我们举个实例。
int
pc, c;
c = 5;
pc = &c;
在此,将5分配给c变量。并且,将c的地址分配给pc指针。

获取指针所指向的值
为了获得指针所指向的内容的值,我们使用了解引用运算符
(*)。例如:

int * pc, c;
c = 5;
pc = &c;
printf(“%d”, * pc); // 输出: 5
此处,c的地址已分配给pc指针。为了获取存储在该地址中的值,我们使用了
pc。

改变指针指向的值
让我们举个实例。

int* pc, c;
c = 5;
pc = &c;
c = 1;
printf(“%d”, c); // 输出: 1
printf(“%d”, *pc); // 输出: 1
**我们已经将c地址分配给了pc指针。
然后,我们将的值更改c为1。由于pc和的地址c相同,因此 *pc得到1。

让我们再举一个实例。

int* pc, c;
c = 5;
pc = &c;
*pc = 1;
printf(“%d”, *pc); // 输出: 1
printf(“%d”, c); // 输出: 1
我们已经将c地址分配给了pc指针。
然后,我们使用
* pc = 1;将
* pc更改为1。 由于pc和c的地址相同,因此c等于1。

让我们再举一个实例。

int* pc, c, d;
c = 5;
d = -15;

pc = &c; printf(“%d”, *pc); // 输出: 5
pc = &d; printf(“%d”, * pc); // 输出: -15
最初,使用的地址c分配给pc指针pc = &c;。因为c是5,所以
*pc给我们5。

然后,使用将地址d分配给pc指针pc = &d;。由于d是-15,所以*pc给我们-15。

示例:指针的工作方式
让我们举一个可行的实例。

#include <stdio.h>
int main()
{
int* pc, c;

c = 22;
printf(“c的地址: %p\n”, &c);
printf(“c的值: %d\n\n”, c); // 22

pc = &c;
printf(“指针pc地址: %p\n”, pc);
printf(“指针pc内容: %d\n\n”, *pc); // 22

c = 11;
printf(“指针pc地址: %p\n”, pc);
printf(“指针pc内容: %d\n\n”, *pc); // 11

*pc = 2;
printf(“c的地址: %p\n”, &c);
printf(“c的值: %d\n\n”, c); // 2
return 0;
}
输出结果

c的地址: 003FFBF8
c的值: 22

指针pc地址: 003FFBF8
指针pc内容: 22

指针pc地址: 003FFBF8
指针pc内容: 11

c的地址: 003FFBF8
c的值: 2
该程序的用法

int pc, c;
将创建一个指针变量和一个普通变量。
这里创建了一个指针pc和一个普通变量c,都是int类型。由于pc和c没有初始化在最初,指针pc指向没有地址或一个随机地址。变量c有一个地址,但包含随机的垃圾值
*。

c = 22;
22被分配给变量c。
这是给变量c赋值22,也就是说,22被存储在变量c的内存中。
pc = &c;
变量c的地址分配给指针pc。
这将变量c的地址分配给指针pc。
c = 11;
11分配给变量c。
这将11分配给变量c。
*pc = 2;
将5分配给指针变量的地址。
这会将指针pc指向的内存位置的值更改为2。

使用指针时的常见错误
假设您希望指针pc指向c的地址。 然后,

int c, *pc;

//pc是地址,但c不是
pc = c; // Error

//&c是地址,但* pc不是
*pc = &c; // Error

//&c和pc都是地址
pc = &c;

//c和*pc值
*pc = c;
建议收藏关注,多读几遍基础含义,便于理解。

相关推荐

  1. C语言自学笔记11----C语言指针

    2024-03-18 09:54:01       36 阅读
  2. C语言自学笔记15----C 语言 void指针

    2024-03-18 09:54:01       42 阅读
  3. C语言自学笔记18----结构体指针

    2024-03-18 09:54:01       38 阅读
  4. C语言自学笔记10----C语言数组

    2024-03-18 09:54:01       37 阅读
  5. C语言】(12指针

    2024-03-18 09:54:01       53 阅读
  6. C语言K&R圣经笔记 5.11函数指针

    2024-03-18 09:54:01       55 阅读
  7. C语言自学笔记5-----C 语言 if...else 语句

    2024-03-18 09:54:01       44 阅读
  8. C语言自学笔记8----C语言Switch语句

    2024-03-18 09:54:01       42 阅读
  9. C语言笔记12

    2024-03-18 09:54:01       34 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-18 09:54:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-18 09:54:01       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-18 09:54:01       82 阅读
  4. Python语言-面向对象

    2024-03-18 09:54:01       91 阅读

热门阅读

  1. 单元测试、集成测试、系统测试区别

    2024-03-18 09:54:01       38 阅读
  2. 单词接龙~~

    2024-03-18 09:54:01       35 阅读
  3. 51单片机与ARM单片机的区别

    2024-03-18 09:54:01       37 阅读
  4. Spring(创建对象的方式3个)

    2024-03-18 09:54:01       39 阅读
  5. 设计模式--访问者模式(Visitor Pattern)

    2024-03-18 09:54:01       42 阅读
  6. To configure two different databases in Spring Boot

    2024-03-18 09:54:01       38 阅读
  7. odoo中传递上下文

    2024-03-18 09:54:01       44 阅读
  8. React高阶组件详解

    2024-03-18 09:54:01       47 阅读
  9. Flutter 当涉及Listview的复杂滑动布局良好布局方式

    2024-03-18 09:54:01       38 阅读
  10. Python实现连连看

    2024-03-18 09:54:01       42 阅读