c语言编程笔录

首页 >   > 笔记大全

笔记大全

C语言中的指针有什么作用

更新时间:2023-10-21

关于C语言中指针的作用

第一段:

指针是C语言中的一个重要特性,作用是对内存进行精细控制。指针实质上就是一个地址,它记录了一个对象的位置信息,可以通过指针来直接操作对象的值。指针的本质作用是对内存的访问,它的优点是可以直接操作内存中的数据,从而提高运行效率。


#include <stdio.h>

int main() {
  int a=10;
  int *p=&a;  // 定义指针变量p,它指向了变量a的内存地址

  *p=20;  // 通过指针p修改变量a的值

  printf("%d\n", a);  // 输出20

  return 0;
}
  

第二段:

指针的使用有利于程序的模块化与重用。通过传递指针,可以共享内存中的数据,从而方便地实现不同模块之间的交互。指针的使用可以节省程序的开销,减少函数调用时的参数传递,避免了不必要的内存拷贝。


#include <stdio.h>

void change(int *p) {
  *p=30;  // 通过指针p修改变量a的值
}

int main() {
  int a=10;
  int *p=&a;  // 定义指针变量p,它指向了变量a的内存地址

  change(p);  // 通过指针传递变量a的地址

  printf("%d\n", a);  // 输出30

  return 0;
}
  

第三段:

指针的使用可以简化程序的代码逻辑。通过指针可以实现动态内存分配,方便地实现各种复杂的数据结构,如链表、树等。指针还可以实现函数指针,便于实现程序的回调机制和可插拔式算法。


#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
  int data;
  struct Node *next;
} Node;

void insert(Node **head, int value) {
  Node *p=(Node *) malloc(sizeof(Node));
  p->data=value;
  p->next=*head;
  *head=p;
}

void printList(const Node *head) {
  while (head !=NULL) {
    printf("%d ", head->data);
    head=head->next;
  }
  printf("\n");
}

int main() {
  Node *head=NULL;  // 定义一个指向链表的指针

  insert(&head, 1);
  insert(&head, 2);
  insert(&head, 3);

  printList(head);  // 输出链表元素

  return 0;
}
  

第四段:

指针的使用需要注意内存泄露和指针悬挂的问题。内存泄露是指程序未能及时释放已经分配的内存,使得系统资源得不到释放,降低了程序的性能。指针悬挂是指指针指向的内存空间已经被释放,但指针仍然保留了该地址,这会导致程序的崩溃。因此,在使用指针时要注意及时释放内存和避免使用悬挂指针。


#include <stdio.h>
#include <stdlib.h>

int main() {
  int *p=(int *) malloc(sizeof(int));  // 动态分配内存空间
  *p=10;

  free(p);  // 释放内存空间

  printf("%d\n", *p);  // 悬挂指针,程序可能崩溃

  return 0;
}