学生时代所学的一些 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的值)。

相关文章
|
23天前
|
存储 C语言
【C语言基础】一篇文章搞懂指针的基本使用
本文介绍了指针的概念及其在编程中的应用。指针本质上是内存地址,通过指针变量存储并间接访问内存中的值。定义指针变量的基本格式为 `基类型 *指针变量名`。取地址操作符`&`用于获取变量地址,取值操作符`*`用于获取地址对应的数据。指针的应用场景包括传递变量地址以实现在函数间修改值,以及通过对指针进行偏移来访问数组元素等。此外,还介绍了如何使用`malloc`动态申请堆内存,并需手动释放。
|
26天前
|
存储 人工智能 C语言
C语言程序设计核心详解 第八章 指针超详细讲解_指针变量_二维数组指针_指向字符串指针
本文详细讲解了C语言中的指针,包括指针变量的定义与引用、指向数组及字符串的指针变量等。首先介绍了指针变量的基本概念和定义格式,随后通过多个示例展示了如何使用指针变量来操作普通变量、数组和字符串。文章还深入探讨了指向函数的指针变量以及指针数组的概念,并解释了空指针的意义和使用场景。通过丰富的代码示例和图形化展示,帮助读者更好地理解和掌握C语言中的指针知识。
|
1月前
|
存储 安全 C语言
C语言 二级指针应用场景
本文介绍了二级指针在 C 语言中的应用,
|
2月前
|
存储 编译器 C语言
【C语言篇】深入理解指针2
代码 const char* pstr = "hello world."; 特别容易让初学者以为是把字符串 hello world.放 到字符指针 pstr ⾥了,但是本质是把字符串 hello world. 首字符的地址放到了pstr中。
|
2月前
|
存储 程序员 编译器
【C语言篇】深入理解指针1
assert.h 头⽂件定义了宏 assert() ,⽤于在运⾏时确保程序符合指定条件,如果不符合,就报错终⽌运⾏。这个宏常常被称为“断⾔”。
|
2月前
|
存储 搜索推荐 C语言
C语言中的指针函数:深入探索与应用
C语言中的指针函数:深入探索与应用
|
1月前
|
Go
Golang语言高级数据类型之指针篇
这篇文章详细讲解了Golang语言中的指针概念、指针地址和类型、定义指针变量、指针的细节操作、指针传值,以及内置函数new和make的用法和它们之间的区别。
15 0
|
2月前
|
存储 安全 Go
深入理解 Go 语言中的指针类型
【8月更文挑战第31天】
13 0
|
2月前
|
存储 Go 开发者
掌握Go语言中的指针
【8月更文挑战第31天】
8 0
|
2月前
|
C语言
【C语言】指针速览
【C语言】指针速览
18 0