广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >详谈C语言指针
  • 470
分享到

详谈C语言指针

2024-04-02 19:04:59 470人浏览 泡泡鱼
摘要

#include<stdio.h> int main() { int a = 10; int b = 20; int* p = &a;//*定义指针变量


#include<stdio.h>
int main()
{
	int a = 10;
	int b = 20;
	int* p = &a;//*定义指针变量
	*p = 100;//*间接访问,解引用,a = 100
	p = &b;//p保存b的地址
	*p = 200;//b = 200
	int** pp = &p;//对指针取地址,二级指针
	*pp = &a;//解一次引用,一级指针p保存的值,即a的地址
	**pp = 1000;//解二次引用,a = 1000
	*pp = &b;//解一次引用,一级指针p保存的值,即b的地址
	**pp = 2000; // 解二次引用,b = 2000
	int*** ppp = &pp;//三级指针
	**ppp = &a;//解二次引用,一级指针p保存的值,即a的地址
	***ppp = 5000;//解三次引用,a = 5000
	**ppp = &b;//解二次引用,一级指针p保存的值,即b的地址
	***ppp = 6000;//解三次引用,b = 6000
	printf("%d", a);
	return 0;
}

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int c = 0;
	int* p1 = &a;
	int* p2 = &b;
	int* p3 = &c;
	*p1 = 100;
	*p2 = 200;
	*p3 = 300;
	*p3 = *p1 + *p2;
	*p3 = *p1 / *p2;
	*p3 += 1;
	printf("%d %d %d\n", *p1, *p2, *p3);//100,200,1
	return 0;
}
  • 指针的大小只与平台有关

32位sizeof( * )=4

64位sizeof( * )=8(字节)


#include<stdio.h>
void Swap_1(int* p1, int* p2)//p1,p2分别保存a和b的地址
{
	int *tmp = p1;//定义指针变量tmp,把p1的值(即a的地址)赋给tmp
	p1 = p2;//把p2的值(即b的地址)赋给p1
	p2 = tmp;//把tmp的值(即a的地址)赋给p2
}            //只交换地址,并没有更改值
#if 0
void Swap_2(int* p1, int* p2)
{
	int* tmp;//悬挂指针,野指针
	*tmp= *p1;
	*p1 = *p2;
	*p2 = *tmp;
}
#endif
void Swap(int* p1, int* p2)//p1,p2分别保存a和b的地址
{
	int tmp;
	tmp = *p1;//把p1解引用的值(即a的值)赋给tmp
	*p1 = *p2;//把p2解引用的值(即b的值),赋给p1解引用的值(即a的值)
	*p2 = tmp;//把tmp的值(即a的值)赋给把p2解引用的值(即b的值)
}             //完成交换。
int main()
{
	int a = 10;
	int b = 20;
	Swap(&a, &b);//主函数的改变要想影响到自定义函数:(1)必须传递指针,(2)必须解引用
	printf("%d,%d\n", a, b);
	return 0;
}

#include<stdio.h>
int main()
{
	int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
	for (int* p = arr; p <= &arr[9]; p++)
	//for (int* p = arr; p < &arr[10]; p++)
	//for (int* p = &arr[9]; p >= &arr[0]; p--)
	//for (int* p = &arr[9]; p > &arr[-1]; p--)
	{
		printf("%d ", *p);
	}
	char a = 'x';
	char* p = &a;
	//int* np = &p;//指针类型不同
	return 0;
}

#include<stdio.h>
void Fun(int* p)
{
	//p = NULL;//空指针,p的值为0
	int* p1= p;//p1保存p的值
	int* p2 = NULL;//p2保存NULL
	int tmp;
	tmp = *p1;//把p1解引用的值(即p的值)赋给tmp
	*p1 = *p2;//把p2解引用的值(即NULL),赋给p1解引用的值(即p的值)
	*p2 = tmp;//把tmp的值赋给把p2解引用的值
}
int main()
{
	int a = 10;
	int* p = &a;
	Fun(p);
	//p = NULL;
	printf("%d\n", *p);
	return 0;
}

总结

assert()(需要头文件#include<assert.h>)

断定表达式一定为真,如果为假程序崩溃,并报告错误位置。

release面向用户版本:assert后面需要进行条件判断。

void* 通用指针,泛型指针

void*无数据类型,不参与运算,不能++和解引用

赋值 通用指针 = 特定指针 特定指针 = 通用指针
c++ char* p;
void* p1=p;
不可以
(char* p;
void* p1=p;
int* p2=p1
(p2=p)数据类型不同 )
C char* p;
void* p1=p;
void* p;
char* p2=p;

C++:NULL——0

C:NULL——((void*)0)

先有C后有C++,C++不支持void*赋值,故定义为0

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!

--结束END--

本文标题: 详谈C语言指针

本文链接: https://www.lsjlt.com/news/155479.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 详谈C语言指针
    #include<stdio.h> int main() { int a = 10; int b = 20; int* p = &a;//*定义指针变量...
    99+
    2022-11-12
  • C语言指针详解
    目录前言:复杂类型说明一、细说指针1.指针的类型2.指针所指向的类型3.指针的值----或者叫指针所指向的内存区或地址4 指针本身所占据的内存区二、指针的算术运算三、运算符&...
    99+
    2022-11-12
  • C语言指针详解之野指针
    目录指针是什么?怎么表示?什么是指针变量?指针类型又是什么?指针类型存在的意义野指针是什么?野指针产生的原因一、 指针未初始化二、 指针越界访问如何避免野指针(野狗)的出现呢?指针运...
    99+
    2022-11-12
  • C语言函数指针的老生常谈
    目录函数指针函数指针的应用函数指针作为参数实例(qsort函数)总结 函数指针 本质上是一个指针,只不过指向函数而已。 编译器在编译期间对函数开辟了一块空间,而这快空间的开始地址,就...
    99+
    2022-11-12
  • C语言指针详细介绍
    本篇内容主要讲解“C语言指针详细介绍”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言指针详细介绍”吧!指针对于C来说太重要。然而,想要全面理解指针,除了要对C语言有熟练的掌握外,还要有计算机...
    99+
    2023-06-15
  • C语言函数指针详解
    目录Introduction函数指针 Function PointersExercise 1:qsort中的函数指针Exercise 2:总结Introduction 上一个lab的...
    99+
    2022-11-12
  • C语言指针基础详解
    目录1.1:概述1.1.1:内存1.1.2:内存1.1.3:指针和指针变量1.2:指针基础知识1.2.1:指针变量的定义和使用1.2.2:通过指针间接修改变量的值1.2.3:指针的大...
    99+
    2022-11-12
  • C语言的空类型指针,空指针,野指针详解
    目录空类型指针-void*空指针-NULL野指针造成野指针的原因1.指针未初始化2.指针越界访问3.指针指向的空间已经释放避免野指针总结空类型指针-void* void是空类型,vo...
    99+
    2022-11-12
  • 老生常谈C语言中指针的使用
    目录前提一.指针基础1.1 变量指针1.2 数据指针1.3 指针的本质1.4 指针数组1.5 指针的移动1.5 Scanf函数的解释二.指针的进阶玩法2.1 二维指针2.2 结构体指...
    99+
    2022-11-13
  • C语言的数组指针与函数指针详解
    目录前言函数指针语法数组指针与指针数组总结前言 数组指针和函数指针都是C语言比较难的知识点,尤其是函数指针,并且函数指针在开发中有着巨大的作用。 函数指针语法 定义一个函数指针,并通...
    99+
    2022-11-13
  • c语言的指针数组详解
    指针如何指向数组,并读取数组中的元素: #include <stdio.h> int main() { int arr[3] = {1,2,3}; int *p;...
    99+
    2022-11-12
  • C语言指针的图文详解
    目录指针是什么?指针和指针变量1. 指针类型决定了指针进行解引用操作的时候,能访问空间的大小2. 指针加减整数野指针野指针的成因指针和数组二级指针指针数组、数组指针总结指针是什么? ...
    99+
    2022-11-12
  • 详解C语言的void*空指针
    目录void的应用空指针类型(void*)总结在C语言中,void称为无类型,相应的void*称为无类型指针或者空指针类型。 void的应用 对函数返回值的限定。 例如void fu...
    99+
    2022-11-13
  • C语言指针的详细介绍
    这篇文章主要介绍“C语言指针的详细介绍”,在日常操作中,相信很多人在C语言指针的详细介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C语言指针的详细介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!目录...
    99+
    2023-06-20
  • C语言指针数组案例详解
    指针与数组是 C 语言中很重要的两个概念,它们之间有着密切的关系,利用这种 关系,可以增强处理数组的灵活性,加快运行速度,本文着重讨论指针与数组之 间的联系及在编程中的应用。 1.指...
    99+
    2022-11-12
  • C语言 指针数组进阶详解
    目录指针与数组中的sizeof与strlensizeofstrlen数组名1、一维数组整型数组字符数组指针数组2、二维数组指针笔试题 笔试题1笔试题2笔试题3笔试题4笔试题...
    99+
    2022-11-13
  • C语言指针教程示例详解
    目录指针内存指针类型指针运算二级指针指针数组指针 指针提供了对地址操作的一种方法,因此,使用指针可使得 C 语言能够更高效地实现对计算机底层硬件的操作。另外,通过指针可以更便捷地操作...
    99+
    2022-11-13
  • C语言中的初阶指针详解
    目录1.指针是什么2.指针和指针类型3.野指针3.1野指针成因3.2如何规避野指针4.指针的运算4.1指针±整数4.2指针-指针4.3指针的关系运算5.指针和数组6.二级指针7.指针...
    99+
    2022-11-12
  • C语言基础指针详解教程
    目录1.1:概述1.1.1:内存1.1.2:内存1.1.3:指针和指针变量1.2:指针基础知识1.2.1:指针变量的定义和使用1.2.2:通过指针间接修改变量的值1.2.3:指针的大...
    99+
    2022-11-12
  • C语言中二级指针解析(指向指针的指针)
    目录二级指针(指向指针的指针)二级指针的定义与理解二级指针定义格式二级指针赋值实例二级指针(指向指针的指针) 指针可以指向一份普通类型的数据,例如 int、double、char 等...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作