理解指针的目的

hax*_*ode 1 c pointers memory-management

我正在读一本关于数据结构的书,并且难以掌握指针的概念.让我先说一下,我对C没有很多经验.但是这里......

如果我执行以下操作:

 int num = 5;
 int *ptrNum;

 ptrNum = #
Run Code Online (Sandbox Code Playgroud)

据我所知,指针为32位int保留了足够的内存以及实际指针所需的内存,尽管它的值只是变量的内存地址.

如果保留相同数量的内存,这样做的目的是什么?为什么我会使用指针而不是变量num?我完全不在这里吗?

Jon*_*ler 12

在值不起作用的情况下使用指针.在你的例子中,你是对的; 没有任何好处.archtetypal边界线有用的例子是交换函数:

void swap_int(int *i1, int *i2)
{
    int t1 = *i1;
    *i1 = *i2;
    *i2 = t1;
}
Run Code Online (Sandbox Code Playgroud)

呼叫顺序:

int main(void)
{
    int v1 = 0;
    int v2 = 31;
    printf("v1 = %d; v2 = %d\n", v1, v2);
    swap_int(&v1, &v2);
    printf("v1 = %d; v2 = %d\n", v1, v2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果你不使用指针就写出来 - 就像这样:

void swap_int(int i1, int i2)
{
    int t1 = i1;
    i1 = i2;
    i2 = t1;
}

int main(void)
{
    int v1 = 0;
    int v2 = 31;
    printf("v1 = %d; v2 = %d\n", v1, v2);
    swap_int(v1, v2);
    printf("v1 = %d; v2 = %d\n", v1, v2);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

然后你只需在函数中交换两个局部变量,而不会影响调用函数中的值.使用指针,可以影响调用函数中的变量.

也可以看看:

  • scanf()- 家庭的功能
  • strcpy()

据我所知,指针为32位int保留了足够的内存以及实际指针所需的内存,尽管它的值只是变量的内存地址.

您似乎描述的内容就像:

int *p1;
Run Code Online (Sandbox Code Playgroud)

做同样的工作:

int _Anonymous;
int *p1 = &_Anonymous;
Run Code Online (Sandbox Code Playgroud)

它没有; 这是C. Creating p1为指针分配足够的空间.首先写的,它没有初始化它,因此它指向一个不确定的位置(或没有位置).它(指针)需要在使用之前进行初始化.因此:

int  i1 = 37;
int *p1 = &i1;
Run Code Online (Sandbox Code Playgroud)

但是p1只能为指针保留足够的空间(通常,32位编译为32位,64位编译为64位); 你必须分别分配它指向的空间,你必须初始化指针.初始化指针的另一种方法是使用动态分配的内存:

int *p2 = malloc(1000 * sizeof(*p2));

if (p2 != 0)
{
    ...use p2 as an array of 1000 integers...
    free(p2);
}
Run Code Online (Sandbox Code Playgroud)

你有结构吗?如果没有,覆盖结构的例子,例如树木或链表,将无济于事.但是,一旦覆盖了结构,您就可以使用树或链表:

struct list
{
    int data;
    struct list *next;
};

struct tree
{
    int data;
    struct tree *l_child;
    struct tree *r_child;
};
Run Code Online (Sandbox Code Playgroud)

这种结构严重依赖于正确连接条目的指针.