服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言 从根本上理解指针

C语言 从根本上理解指针

2022-11-11 14:33清风自在 流水潺潺 C/C++

C语言这门课程在计算机的基础教学中一直占有比较重要的地位,然而要想突破C语言的学习,对指针的掌握是非常重要的,本文将具体针对指针的基础做详尽的介绍

一、* 的意义

  • 在指针声明时,* 号表示所声明的变量为指针
  • 在指针使用时,* 号表示取指针所指向的内存空间中的值

如下:

int i = 0;
int j = 0;
int* p = &i; //指针声明
j = *p; //取值

变量 p 保存着变量 i 的内存地址,即:p <--> &i *p <--> i

C语言 从根本上理解指针

* 号类似一把钥匙,通过这把钥匙可以打开内存,读取内存中的值。

下面看一个指针的使用示例:

#include <stdio.h>
int main()
{
  int i = 0;
  int* pI;
  char* pC;
  float* pF;
  
  pI = &i;
  
  *pI = 10;
  
  printf("%p, %p, %d\n", pI, &i, i);
  printf("%d, %d, %p\n", sizeof(int*), sizeof(pI), &pI);
  printf("%d, %d, %p\n", sizeof(char*), sizeof(pC), &pC);
  printf("%d, %d, %p\n", sizeof(float*), sizeof(pF), &pF);
  
  return 0;
}

输出结果如下:

C语言 从根本上理解指针

所有 32 位系统上的指针变量占用内存大小都为 4 个字节。

 

二、传值调用与传址调用

  • 指针是变量,因此可以声明指针参数
  • 当一个函数体内部需要改变实参的值,则需要使用指针参数
  • 函数调用时实参值将复制到形参
  • 指针适用于复杂数据类型作为参数的函数中

下面看一个利用指针交换变量的代码:

#include <stdio.h>

int swap(int* a, int* b)
{
  int c = *a;
  
  *a = *b;
  
  *b = c;
}

int main()
{
  int aa = 1;
  int bb = 2;
  
  printf("aa = %d, bb = %d\n", aa, bb);
  
  swap(&aa, &bb);
  
  printf("aa = %d, bb = %d\n", aa, bb);
  
  return 0;
}

输出结果如下:

C语言 从根本上理解指针

 

三、常量与指针

const int* p; //p 可变,p 指向的内容不可变
int const* p; //p 可变,p 指向的内容不可变
int* const p; //p 不可变,p 指向的内容可变
const int* const p; //p 和 p 指向的内容都不可变

口诀:左数右指

当 const 出现在 * 号左边时指针指向的数据为常量,当 const 出现在 * 后右边时指针本身为常量

下面通过一个例子加深理解:

#include <stdio.h>

int main()
{
  int i = 0;
  
  const int* p1 = &i;
  int const* p2 = &i;
  int* const p3 = &i;
  const int* const p4 = &i;
  
  *p1 = 1;    // compile error
  p1 = NULL;  // ok
  
  *p2 = 2;    // compile error
  p2 = NULL;  // ok
  
  *p3 = 3;    // ok
  p3 = NULL;  // compile error
  
  *p4 = 4;    // compile error
  p4 = NULL;  // compile error
  
  return 0;
}

输出结果如下:

C语言 从根本上理解指针

 

四、小结

  • 指针是 C 语言中一种特别的变量
  • 指针所保存的值是内存的地址
  • 可以通过指针修改内存中的任意地址内容

C语言 从根本上理解指针

到此这篇关于C语言 从根本上理解指针的文章就介绍到这了,更多相关C语言 指针内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_43129713/article/details/123573522

延伸 · 阅读

精彩推荐
  • C/C++C++ 排序插入排序实例详解

    C++ 排序插入排序实例详解

    这篇文章主要介绍了C++ 排序插入排序实例详解的相关资料,需要的朋友可以参考下...

    kent鹏4262021-05-17
  • C/C++C语言字符串大小比较

    C语言字符串大小比较

    本文给大家分享给大家的是C语言的字符串大小比较的函数,有需要的小伙伴可以参考下。...

    C语言教程网10642021-03-04
  • C/C++C语言 八大排序算法的过程图解及实现代码

    C语言 八大排序算法的过程图解及实现代码

    排序是数据结构中很重要的一章,本文主要为大家介绍了常用的八个排序算法(插入,希尔,选择,堆排,冒泡,快排,归并,计数)的过程及代码实现,需...

    梦乡回雪10162022-03-08
  • C/C++C语言编一个数字益智小游戏

    C语言编一个数字益智小游戏

    这篇文章主要介绍了C语言编一个数字益智小游戏,本文通过实例截图的形式给大家展示的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    烤酱酱酱酱10962021-08-11
  • C/C++C++实现学生成绩管理系统最新版

    C++实现学生成绩管理系统最新版

    这篇文章主要为大家详细介绍了C++实现学生成绩管理系统最新版,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    名名名名10082021-11-16
  • C/C++C语言非递归后序遍历二叉树

    C语言非递归后序遍历二叉树

    这篇文章主要为大家详细介绍了C语言非递归后序遍历二叉树,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    数星星的咚咚咚11482021-06-07
  • C/C++C语言数据结构实现字符串分割的实例

    C语言数据结构实现字符串分割的实例

    这篇文章主要介绍了C语言数据结构实现字符串分割的实例的相关资料,希望通过本文能帮助到大家实现这样的功能,需要的朋友可以参考下...

    爱思考的小鸟4272021-06-06
  • C/C++详解C语言中的ttyname()函数和isatty()函数的用法

    详解C语言中的ttyname()函数和isatty()函数的用法

    这篇文章主要介绍了C语言中的ttyname()函数和isatty()函数的用法,是C语言入门学习中的基础知识,需要的朋友可以参考下...

    C语言教程网4782021-03-11