int指针与int有何本质区别?

99ANYc3cd6
预计阅读时长 11 分钟
位置: 首页 C语言 正文

在 C 语言中,int point 不是一个标准的、独立的语法结构。 你不会直接写 int point; 来声明一个“点”对象。

c语言 int point
(图片来源网络,侵删)

point 通常是一个变量名,而 int 是它的数据类型int point; 的意思是“声明一个名为 point 的整型变量”。

下面,我将从几个方面来解释你可能想问的关于“点”和 int 的概念:


int point 作为普通的整型变量声明

这是最直接的理解。point 只是一个普通的变量名,用来存储一个整数。

#include <stdio.h>
int main() {
    // 声明一个名为 point 的整型变量
    int point = 100; 
    // 使用这个变量
    printf("当前的分数是: %d\n", point); // 输出: 当前的分数是: 100
    point = 150; // 修改它的值
    printf("更新后的分数是: %d\n", point); // 输出: 更新后的分数是: 150
    return 0;
}

在这个例子里,point 就像一个计分板,记录着一个整数分数。


int point 作为结构体成员(最常见的情况)

当我们想在 C 语言中表示一个“点”(比如坐标系中的点 (x, y))时,我们通常会使用结构体,这个“点”对象会包含两个 int 成员:x 坐标和 y 坐标。

在这种情况下,你会看到 int point; 这样的声明,但它是在结构体内部。

示例:定义一个 Point 结构体

#include <stdio.h>
// 1. 定义一个名为 Point 的结构体
//    这个结构体描述了一个二维点
struct Point {
    int x; // 点的 x 坐标,是一个整数
    int y; // 点的 y 坐标,是一个整数
};
int main() {
    // 2. 声明一个 Point 类型的变量 p1
    //    这里的 p1 才是一个真正的“点”对象
    struct Point p1;
    // 3. 给 p1 的成员赋值
    p1.x = 10;
    p1.y = 20;
    // 4. 访问和打印 p1 的成员
    printf("点 p1 的坐标是: (%d, %d)\n", p1.x, p1.y); // 输出: 点 p1 的坐标是: (10, 20)
    return 0;
}

使用 typedef 简化代码

为了避免每次都写 struct Point,我们通常会用 typedef 来给结构体类型起一个别名。

#include <stdio.h>
// 使用 typedef 为 struct Point 创建一个别名 Point
typedef struct {
    int x;
    int y;
} Point;
int main() {
    // 现在可以直接使用 Point 来声明变量了,更简洁
    Point p1;
    p1.x = 10;
    p1.y = 20;
    printf("点 p1 的坐标是: (%d, %d)\n", p1.x, p1.y);
    return 0;
}

这才是 C 语言中处理“点”这类复杂数据的标准方式,结构体将不同类型的数据(int x, int y)捆绑成一个有意义的整体。


int point 作为指针变量(int *point

这是一个非常容易混淆的地方,如果你看到的是 int *point;,那么它声明的不是一个“点”,而是一个指向整数的指针

  • point 是变量名。
  • int * 是数据类型,意思是“一个指向 int 类型的指针”。

指针变量存储的是另一个变量的内存地址。

#include <stdio.h>
int main() {
    int score = 95; // 一个普通的整型变量
    // 声明一个指向整型的指针 point_ptr
    // 注意星号 * 的位置,它靠近类型 int 或 变量 point_ptr 都可以
    int *point_ptr; 
    // 将 score 的地址赋给指针 point_ptr
    point_ptr = &score; // & 是取地址运算符
    // 通过指针访问它指向的值
    printf("指针 point_ptr 指向的值是: %d\n", *point_ptr); // 输出: 指针 point_ptr 指向的值是: 95
    printf("score 的值是: %d\n", score); // 输出: score 的值是: 95
    // 通过指针修改它指向的值
    *point_ptr = 100;
    printf("通过指针修改后,score 的值是: %d\n", score); // 输出: 通过指针修改后,score 的值是: 100
    return 0;
}

*`int pointint point` 的区别总结:**

特性 int point; int *point;
含义 声明一个整型变量,用来存储一个整数。 声明一个指针变量,用来存储一个整数的内存地址。
一个整数(10, 100)。 一个内存地址(0x7ffc...)。
大小 通常是 4 或 8 字节(取决于系统和 int 的大小)。 通常是 4 或 8 字节(取决于系统的地址总线宽度)。
操作 直接赋值整数(point = 10;)。 赋值地址(point = &another_var;),解引用赋值(*point = 20;)。

当你看到 int point 时,需要根据上下文来判断它的确切含义:

  1. 最可能的情况point 是一个普通的整型变量的名字,它存储一个整数。
  2. 表示一个“点”对象point 很可能是一个结构体struct Point)的实例,这个结构体内部包含了 int xint y 等成员,这是 C 语言中表示坐标点、分数等复合数据的标准方法。
  3. 指针的误写:如果上下文涉及内存地址,那么你可能想表达的是 int *point,这是一个指向整数的指针

希望这个详细的解释能帮助你完全理解 int point 在 C 语言中的不同含义和用法!

-- 展开阅读全文 --
头像
void foo 函数究竟有何作用?
« 上一篇 02-26
C语言中continue具体作用是什么?
下一篇 » 02-26

相关文章

取消
微信二维码
支付宝二维码

目录[+]