C语言之初识指针

指针是什么?

那到底什么是指针呢,其实指针和之前学习的变量基本相似,不过变量里面放的是一些值,而指针里面放的是它所指的地方的地址。在声明一个变量是,计算机就会为该变量预留一个位置,而指针所指☞的就是那个位置。

举个例子:

int a = 10;//设置一个变量a的值为10

int *p = &a;//p这个指针里面就放的是a的地址

而&这个符号,就是取地址符,就像我们在使用scanf函数时  scanf("%d",&a); 这个a前面的&是一个意思,就是获取到某个变量的地址。

而当你创建了一个指针是,你就要给他赋地址,否则的话它就会像那种鼠标一样在硬盘上乱找,就会随机找个地址,所以我们在创建了指针时,就一定要给他去给他赋一个位置。

指针的基础:

如何创建一个指针函数呢?

int p; 这是我们之前就知道的,创建一个整形变量p,而int *p; 就是设置一个指针p;关键就是在于中间的 *。所以我们在创建指针变量时,一定不要忘记 *;

指针的赋值:可以在创建指针的时候就赋值像这样:int *p = &a;  也可以在创建了之后单独赋值像这样: int *p;   p = &a;   两种方法都一样,没有太大的区别,只不过一个一行代码,一个两行代码,如果我们之前已经创建了变量,那我们还是在创建指针的时候就直接给他赋值,以免后面忘了,对自己后续的程序发生影响。

那指针到底能干什么呢?

#include <stdio.h>

int main()
{
    int a = 10;
    int *p = &a;
    printf("a的地址为%p",&a);//这是直接输出a的地址
    printf("a的地址为%p",p);//只是输出p的指针所指的地址
    printf("a的值为%d",*p);//输出p的指针所指的地址中变量的值

    return 0;
}

通过这3个输出函数我们可以知道,前两个输出的都是a的地址,而第三个输出的则是a变量里的值。

所以我们可以理解为 *p 就是 a 这个变量的值,这就是最通俗易懂的理解了。

并且在输出 p 时也就是输出 a 的地址时,也是有不同的输出方式的,最基础的就是

%lu 是十进制的方式输出;

%p是以十六进制的方式输出;

之前说到 *p 可以看作是它所指的 a 变量的值,所以它也是可以再重新被赋值的,当然它的赋值不是给指针函数赋值,看似是在给指针赋值,其实改变的还是它所指的函数的值;

像这样

int a,*p;
a = 10;
p = &a;
*p = 20;
printf("a = %d",*p);

这个函数所输出的值就会为 20 ;因为指针是之间在你的地址上给你改变,所以说指针的改变相比较之前的函数就会方便很多,比如我们在学习函数的时候,会将值从主函数传到其他的函数中去做计算,但是传回来时就很麻烦,因为它一次只能传回来一个值,但是指针就不一样了,它不需要将值传回来,直接时实时将它所指的值进行改变;

像接下来这个例子,我们之前也都用函数的方式写过;

#include <stdio.h>

void swap(int* p, int* q)
{
	int temp;
	temp = *p;
	*p = *q;
	*q = temp;

}
int main()
{
	int a = 10, b = 20;
	swap(&a, &b);
	printf("a=%d  b=%d",a,b);

	return 0;
}

这个函数最后输出的值为

可以看到,输出的值已经发生了交换,这就是指针的强大之处吧;

可以更简单的来解决我们之前遇到的问题,所以说,学好指针是学好c语言的基础!

到此这篇关于C语言之初识指针的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • C语言结构体指针引用详解

    目录 指向结构体变量的指针 指向结构体数组的指针 结构体指针,可细分为指向结构体变量的指针和指向结构体数组的指针. 指向结构体变量的指针 前面我们通过"结构体变量名.成员名"的方式引用结构体变量中的成员,除了这种方法之外还可以使用指针. 前面讲过,&student1 表示结构体变量 student1 的首地址,即 student1 第一个项的地址.如果定义一个指针变量 p 指向这个地址的话,p 就可以指向结构体变量 student1 中的任意一个成员. 那么,这个指针变量定义成

  • C语言指针基础详解

    目录 1.1:概述 1.1.1:内存 1.1.2:内存 1.1.3:指针和指针变量 1.2:指针基础知识 1.2.1:指针变量的定义和使用 1.2.2:通过指针间接修改变量的值 1.2.3:指针的大小 1.2.4:空指针与野指针 1.2.4:万能指针 1.3:指针与数组 1.3.1:数组名 1.3.2:指针操作数组 1.3.3:指针的加减运算 1.4:指针基础小结 1.5:总结 1.1:概述 1.1.1:内存 内存含义: 储存器:用来存储程序和数据,辅助CPU进行运算处理的重要组成部分. 内存:

  • C语言基础指针详解教程

    目录 1.1:概述 1.1.1:内存 1.1.2:内存 1.1.3:指针和指针变量 1.2:指针基础知识 1.2.1:指针变量的定义和使用 1.2.2:通过指针间接修改变量的值 1.2.3:指针的大小 1.2.4:空指针与野指针 1.2.4:万能指针 1.2.5:const修饰的指针变量 1.3:指针与数组 1.3.1:数组名 1.3.2:指针操作数组 1.3.3:指针的加减运算 1.3.4:指针数组 1.4:指针基础小结 1.5:结语 1.1:概述 1.1.1:内存 内存含义: 储存器:用来存

  • C语言函数指针的老生常谈

    目录 函数指针 函数指针的应用 函数指针作为参数实例(qsort函数) 总结 函数指针 本质上是一个指针,只不过指向函数而已. 编译器在编译期间对函数开辟了一块空间,而这快空间的开始地址,就是它的函数指针 . 下面我们也直接用最直观的程序来了解函数指针: #if 1 void func() { printf("hello ptr!"); } int main() { void (*p)(); p = func; p(); } #endif 在这里我们给出了func()函数,并在其中打印

  • C语言之初识指针

    指针是什么? 那到底什么是指针呢,其实指针和之前学习的变量基本相似,不过变量里面放的是一些值,而指针里面放的是它所指的地方的地址.在声明一个变量是,计算机就会为该变量预留一个位置,而指针所指☞的就是那个位置. 举个例子: int a = 10;//设置一个变量a的值为10 int *p = &a;//p这个指针里面就放的是a的地址 而&这个符号,就是取地址符,就像我们在使用scanf函数时  scanf("%d",&a); 这个a前面的&是一个意思,就是

  • C语言入门篇--初识指针和指针变量

    1.指针 指针就是地址(即一个数据). 2.指针变量 2.1概念 (1)指针变量是变量,是变量在内存中就会开辟空间,会有自己对应的的地址,有自己的变量大小. (2)指针变量里放的内容是地址(即指针). 2.2指针变量大小 32位平台下,4字节. 48位平台下,8字节. 2.3指针变量理解 理解前一定先看看,地址相关知识. #include <stdio.h> int main() { int a = 10; int *p = &a;//p为指针变量 printf("a的地址=

  • C语言修炼之路初识指针阴阳窍 地址还归大道真上篇

    目录 (壹) 敢问指针为何物 1.1 指针的概念 1.2 指针的背后 (贰) 指针和指针类 2.1 指针的类型 2.2 指针类型的意义 2.3 指针的解引用 (壹)  敢问指针为何物 1.1  指针的概念 在计算机科学中,指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值.由于通过地址能找到所需的变量单元,可以说,地址指向该变量单元.因此,将地址形象化的称为“指针”.意思是通过它能找到以它为地址的内存单元. 那我们就可以这样

  • C语言修炼之路初识指针阴阳窍 地址还归大道真下篇

    目录 (壹) 行经旅途遇猛虎--“野指针” 1.1野指针成因 1.指针未初始化 2.指针越界访问 3. 指针指向的空间释放 1.2 巧法规避野指针 (贰) 指针之运算 2.1 指针+-整数 2.2 指针-指针 课堂小补充 (利用指针-指针实现strlen) (叁) 指针和数组 3.1 数组名 3.2 二级指针 3.3 指针数组 (壹)  行经旅途遇猛虎 -- “野指针” 概念:野指针就是指针指向的位置是不可知的(随机的.不正确的.没有明确限制的)指针变量在定义时如果未初始化,其值是随机的,指针变

  • Go语言中的指针运算实例分析

    本文实例分析了Go语言中的指针运算方法.分享给大家供大家参考.具体分析如下: Go语言的语法上是不支持指针运算的,所有指针都在可控的一个范围内使用,没有C语言的*void然后随意转换指针类型这样的东西.最近在思考Go如何操作共享内存,共享内存就需要把指针转成不同类型或者对指针进行运算再获取数据. 这里对Go语言内置的unsafe模块做了一个实验,发现通过unsafe模块,Go语言一样可以做指针运算,只是比C的方式繁琐一些,但是理解上是一样的. 下面是实验代码: 复制代码 代码如下: packag

  • C语言中函数指针的三种使用方法总结

     C语言中函数指针的三种使用方法总结 在这里分享一下自己的心得,希望和大家一起分享技术,如果有什么不足,还请大家指正.写出这篇目的,就是希望大家一起成长,我也相信技术之间没有高低,只有互补,只有分享,才能使彼此更加成长. 定义方式:int (*p)(int x, int y); 实现代码: #include <stdio.h> int sum(int x, int y){ return x + y; } int reduce(int x, int y){ return x - y; } int

  • C语言中二级指针的实例详解

    C语言中二级指针的实例详解 用图说明 示例代码: #include <stdio.h> int main(int argc, const char * argv[]) { // int a = 5; int *p1 = &a; //-打印地址-----地址相同--------------- printf("&a = %p\n", &a);// printf("p1 = %p\n", p1);// int **p2 = &p

  • C语言中的指针以及二级指针代码详解

    很多初学者都对C中的指针很迷糊,希望这篇blog能帮助到大家: 1.什么是"指针": 在执行C程序的时候,由于我们的数据是存储在内存中的.所以对于C程序本身来说,如果想找到相应被调用的数据,就要知道存储该数据的内存地址是多少,换言之,C程序通过已知的内存地址到相应的内存位置存储数据. 这里简单说一下内存管理(对于初学者来说.为了避免专业术语引发的理解问题,下面的叙述尽量避免专业定义:),对于现代计算机系统来说,内存空间分为两个区域,一个是"数据区",一个是"

  • 详解C语言中的指针与数组的定义与使用

    指针的特点 他就是内存中的一个地址 指针本身运算 指针所指向的内容是可以操作的 操作系统是如何管理内存的 栈空间 4M~8m的大小 当进入函数的时候会进行压栈数据 堆空间 4g的大小 1g是操作系统 全局变量 内存映射 可以对内存的内容修改修改硬盘的内容 一般在数据库中经常使用 内存的分配与释放 c语言分配内存的方法 // malloc(需要分配的大小): 这里的分配的大小需要对齐的2的指数 void *mem = malloc(size); 释放内存 // 一般分配的内容都是在堆空间中的 //

  • C语言结构体指针案例解析

    写结构体指针前,先说一下 . 号和 -> 的区别 记得当初刚学C语言的时候,搞不清结构体的 . 号和 -> ,经常混淆二者的使用. 那么在C语言中 . 号是成员访问运算符,当我们需要访问结构的成员的时候,就会使用到它 而当我们需要使用结构体指针来访问结构成员的时候,就得使用->运算符了. 结构体指针栗子: ​#include<stdio.h> #include<string.h> typedef struct student{ int id; char name[

随机推荐