学生时代所学的一些 C 语言知识点回顾(3)——再议指针的声明与使用

简介: 学生时代所学的一些 C 语言知识点回顾(3)——再议指针的声明与使用 # include int main(int argc,char *argv[]){ int *p; *p = 203030; printf("%d\n",*p); } 这段代码能正常通过编译,但是不能正常执行。

学生时代所学的一些 C 语言知识点回顾(3)——再议指针的声明与使用

开始阅读本文之前,让我们来看一下以下代码:

# include<stdio.h>

int main(int argc,char *argv[]){
  int *p;
  *p  = 203030;
  printf("%d\n",*p);
}

相信很多初学者都会犯类似的错误。这段代码能正常通过编译,但是不能正常执行。原因在于:指针变量 p 没有明确的指向。在实际编程中,类似的错误应该避免。

# include<stdio.h>

int main(int argc,char *argv[]){
  int *p, i = 2018;
  int example(int *);
  printf("%d\n",example(&i));
}

int example(int *p){
  *p = 2019;
  return *p;
}
// 2019

上面的代码能够顺利通过编译,且能正常执行,且在调用函数 example() 时, & 运算符不能省略。看完这段代码后,我猜肯定会有人问,函数定义时为何能直接使用“*p = 2019”这样的语句进行赋值呢?

如果有这样的疑问,那就对了,请继续往下看:

# include<stdio.h>

int main(int argc,char *argv[]){
  int *p, i = 2019;
  p = &i;
  *p = 2016;
  printf("p = %d, i = %d\n",*p,i);
}
// p = 2016, i = 2016

这段代码就比第一段代码多了一行,也就是将指针指向了具体的对象。就这样,代码能通过编译且能正常执行了。

通过对这三段代码的对比,我们会发现: 指针必须指向具体的对象。在函数定义时,指针类型的形参里的 * 声明了这个形式参数是一个指针,在函数调用时,形参被具体化。调用函数时使用的 & 运算符指明了该指针具体指向的对象,并非未定义而直接使用。一个具有明确指向的指针通过间接寻址的方式可以改变所指向对象的值(第三段代码中,i的值)。

相关文章
|
1月前
|
存储 编译器 C语言
[C语言] 初识指针
[C语言] 初识指针
|
14天前
|
存储 C语言
C语言 — 指针进阶篇(下)
C语言 — 指针进阶篇(下)
20 0
|
14天前
|
存储 C语言 C++
C语言 — 指针进阶篇(上)
C语言 — 指针进阶篇(上)
26 0
|
19天前
|
存储 编译器 C语言
C语言核心知识点总结
【4月更文挑战第5天】C语言核心知识点:包括数据类型(整型、字符型、实型、枚举型)、运算符(算术、关系、逻辑、位、赋值)、控制语句(条件、循环、跳转)、函数、指针、数组、结构体和预处理器(宏定义、条件编译)。这些概念构成了C语言的基础,支持高效系统及应用软件开发。
18 5
|
20天前
|
存储 程序员 C语言
C语言指针的概念、语法和实现
在C语言中,指针是其最重要的概念之一。 本文将介绍C语言指针的概念、语法和实现,以及如何使用它们来编写高效的代码。
13 0
|
20天前
|
存储 C语言
【C语言】深入解开指针(三)2
【C语言】深入解开指针(三)
|
20天前
|
存储 程序员 C语言
【C语言】深入解开指针(二)2
【C语言】深入解开指针(二)
【C语言】深入解开指针(二)2
|
20天前
|
存储 C语言
【C语言】深入解开指针(一)1
【C语言】深入解开指针(一)
|
22天前
|
C语言 索引
基于C语言的函数指针应用-消息命令处理框架
基于C语言的函数指针应用-消息命令处理框架
11 0
|
28天前
|
存储 人工智能 编译器
C语言指针详解
指针运算,指针和数组,二级指针
C语言指针详解