首页 > 其他分享 >指针学习

指针学习

时间:2023-05-05 18:11:55浏览次数:31  
标签:return int 学习 地址 数组 printf 指针


#include <stdio.h> int main(void) { int a; int* p; printf("%d\n", sizeof(a)); printf("%d\n", sizeof(p)); return 0;
在上面这段代码中,用sizeof的方式显示了int和int*有占据多少字节,验证了指针变量的字节根据系统位数形成,而拿我使用的64位系统举例,输出为8

接下来我们运用p=&a进行取地址,再用p*访问地址中的内容

int main(void)
{
    char a=0x66;
    char* p;

    p = &a;
    printf("%x\n", a);
    printf("%x\n", p);   //p是取地址
    printf("%x\n", *p);  //前面定义了p是指向a的地址,而指针变量*p则是取地址中的内容

    p++;
    printf("%x\n", p);
    return 0;

}

其中p++和p--的使用,可以实现数据类型地址的加减,但是并不是单纯的加1减1,要根据数据类型的字节而定

例如:char占用一个字节,p++实现地址+1

   int占用四个字节,p++实现地址+4

   p--同理

 

数组与指针的关系

数组的等级和指针是一样的,互通的,以下面这段代码举例子

#include <stdio.h>

int main(void)
{
    char a[] = { 0x33,0x34,0x35 };
    char* p;
    p = a;
    printf("p*=%x\n", *p);       //输出33
    printf("(p+1)*=%x\n", *(p+1));//输出34    
    printf("(p+2)*=%x\n", *(p + 2));//输出35

    return 0;

}

可以看到先声明数组a和指针*p,p=a,这里没有用p=&a是因为数组本身就是地址名,a[x]就是取地址中从0开始的第x个数,因此不需要加“&”

在使用指针和数组共通时,*p +1就是输出a数组里的下一个数而非地址。 

 

数据传递

让我们先看普通的值传递

#include <stdio.h>
void fun(int param)
{
    printf("%x\n", param);
}

int main(void)
{
    int a = 0x66;
    fun(a);
    
    return 0;
}

 接下来这段写一个用指针实现寻求数组最大值,在首行Findmax函数中用指针设立一个形参,方便接下来在主函数中把数值传递进来,一定要注重同级传递。

在这段函数中,int* array的等级相当于数组,同数组一样属于指针变量。

int Findmax(int *array,int Count) //设形参,接住主函数的数组
{
    int i;
    int max = array[0];
    for (i = 1;i < Count; i++)  
    {
        if (array[i] > max)   //数组中比大小寻求最大值
        {
            max = array[i];
        }
    }
    return max;
}
int main(void)
{
    int a[] = { 13,4,2,5,6,81 }; 
    int Max;
    Max = Findmax(a, 6);
    printf("Max=%d\n", Max); 
    return 0;
}

 

 

 

 

 

标签:return,int,学习,地址,数组,printf,指针
From: https://www.cnblogs.com/ejean/p/17340832.html

相关文章

  • 记录-Symbol学习笔记
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助Symbol是JavaScript中的原始数据类型之一,它表示一个唯一的、不可变的值,通常用作对象属性的键值。由于Symbol值是唯一的,因此可以防止对象属性被意外地覆盖或修改。以下是Symbol的方法和属性整理:属性Symbol.length......
  • MFC学习随笔
    1.原理1.1设计窗口 wc.cbClsExtra=0;//类的额外内存 wc.cbWndExtra=0;//窗口额外内存 wc.hbrBackground=(HBRUSH)GetStockObject(WHITE_BRUSH);//设置背景-白色 wc.hCursor=LoadCursor(NULL,IDC_HAND);//设置光标,如果第一个参数为NULL,代表使用系统提供的......
  • ExtJs学习之Button(08)
    最少代码:HelloWorld.html源文件下载点击事件<linkrel="stylesheet"href="theme-gray-all.css"><!--样式--><scriptsrc="ext-all.js"></script><!--行为--><script>Ext.onReady(function(){/*-自己写的代码--开始--......
  • JavaSpring学习的报错查看
    警告:Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname'bookService'definedinclasspathresource[applicationContext.xml]:C......
  • JavaScript学习汇总
    ExtJs学习之Button(08)uniGUI学习之脱离Delphi直接写ExtJS从入门到精通04官方文档查找办法_例如_Ext.Window(48)uniGUI学习之脱离Delphi直接写ExtJS从入门到精通03自定义函数_调用顺序(47)uniGUI学习之脱离Delphi直接写ExtJS从入门到精通02Ext.Panel创建后_调用的几种方法(46)......
  • 1 字符串 、2 指针 、3 结构体 、4 方法、 5 接口
    目录1字符串2指针3结构体4方法5接口1字符串packagemain//字符串funcmain(){ //1定义字符串 //vars="中alqz" //2字符串可以按下标取值,不能改 //s[0]=98 //fmt.Println(s[0])//取字节,是个数字 //fmt.Println(s[3]) //fmt.Printf("%T\n",s[3])/......
  • 人工智能学习入门学习笔记 1
    目前人工智能算法分哪几类,哪些是需要训练的?人工智能算法通常可以分为以下几类:1. 监督学习(SupervisedLearning):需要有标注数据,即输入数据与输出结果是已知的,算法通过学习这些数据来建立一个输入到输出的映射模型。例如,图像分类、自然语言处理和预测等任务。2. 无监督学习(Unsupervi......
  • FFT学习笔记
    快速傅里叶变换多项式定义不严谨定义:形如\(f(x)=\sum\limits_{i=0}^{n}a_ix^i\)的式子为多项式。定义(fromOIWiki):对于求和式\(\suma_nx^n\),如果是有限项相加,称为多项式,记作\(f(x)=\sum\limits_{n=0}^ma_nx^n\)。次数:对于多项式\(F(x)=\sum\limits_{i=0}^{n......
  • Rust语言中级教程之指针
    Rust语言中级教程一、指针什么是指针指针是计算机引用无法立即直接访问的数据的一种方式(类比书的目录)数据在物理内存(RAM)中是分散的存储着地址空间是检索系统指针就被编码为内存地址,使用usize类型的整数表示。一个地址就会指向地址空间中的某个地方地址空间的范围是......
  • wireshark(抓包)学习
    1、Wireshark简介Wireshark(前称Ethereal)是一个免费开源的网络数据包分析软件。网络数据包分析软件的功能是截取网络数据包,并尽可能显示出最为详细的网络数据包数据。Wireshark官方网站:https://www.wireshark.org,可以去官网查看这款软件的详细信息2、Wireshark基本使用方法......