2021-06-04 · 2

C 指针

ctil

这篇文章发布已超过两年,内容可能已过时。

C、C++ 指针


什么是指针?

让其指向特定内存位置的变量称为指针(pointer)。也就是说,知道地址才能使用。

我们至今声明变量时,并不认为那个变量被记录在内存里,只想着声明的名字和值来使用。但实际上,声明 int a; 就相当于说 '在内存 x132453647(任意)以 int 类型、变量名 a、未初始化状态使用'。这时输入 a = 10; 就相当于 '把内存 x132453647 处的值改成 10'。

所以我们使用指针,意思是 '去找内存 x132453647(任意)',而不是找 '名为 a' 的变量。知道地址后,自然也就能知道值了。

声明指针!

指针的样子也和以前声明变量非常相似。数据类型也有 int、float、double、long、char 等。像变量一样声明,只是在中间加个 * 即可。

例如

//int 型指针
int *a;

//float 型指针
float *a;

//double 型指针
double *a;

可以像上面这样声明。

指针的声明与初始化——怎样才能在声明的同时初始化呢?还记得我们学 "scanf" 时用过 "&" 这个符号吗?这个 "&" 符号正是告知地址的符号。

例如

#include <stdio.h>

int main() {
    int num1 = 5;
    int num2 = 10;
    int *num1Ptr = &num1;
    int *num2Ptr = &num2;

    printf("%d %d\n", num1, *num1Ptr);
    printf("%d %d\n", num1, num1Ptr);
}

/*
输出:5  5
      10 10
*/

可以像上面这样做。稍作说明:声明 int 型变量 num1、num2 后,也声明 int 型指针 num1Ptr、num2Ptr,

int* num1Pointer = &num1;

int * num1Pointer = &num2;

输入这些后,可以确认它们各自接收了 num1 和 num2 的地址。结果可以确认 num1 值和 *num1Ptr 的值输出一致。

注意!

声明 int 型指针 int* p,并做 p = &num1——把 num1 变量的值赋给 int 型指针变量 p 时,

像 printf("%d", *p) 那样给 p 加 * 使用,表示 p 所指地址处的值;

像 printf("%d", p) 那样只用 p,表示 p 正指向的地址。


原文(韩语): tistory — 发布于 2021-06-04,已迁移至本博客。本翻译由 AI 协助完成。

评论

删除这条评论?

相关文章

C 指针 · 나봄하랑