C语言--指针

C语言--指针

基本概念

什么是指针:地址类型的变量

大小 x86 x64
sizeof(long long*) 4 8
sizeof(int***) 4 8
sizeof(char*) 4 8

地址跟平台有关

  • 普通指针:int val=0; int*p=&val;
  • 数组指针:int arr[3] int (*p1)[3]=&arr; 其中p1+1的能力代表着偏移量为12个字节。
  • 函数指针:
cpp 复制代码
                        int add(int a,int b);
                         int (*p)(int,int) =add;
                             add(1,2);
                             p(1,2);                   `

指针的使用

  • 普通指针: 利用解引用对变量进行赋值。
cpp 复制代码
int val=0;
int *p=&val;
*p=1;//此时val的值为1
  • 数组指针:数组名本身就是指向数组首元素的地址,可直接利用其去访问数组元素。
cpp 复制代码
int arr[]={1,2,3,4,5,6};
int *p=arr;
  • 函数指针:
c 复制代码
//函数指针
double * Test(const char* str,int n ){
}
//调用
double (*PFun) (const char*,int)=Test;
//此时以下两者等价
Test("",1)==PFun("",1);

存储问题

栈是由高往低开,堆是由低往高开

数据低位保存在内存的高地址中,高位保存在低地址中成为大端存储,相反,低位保存在低位,高位保存在高位,成位小端存储。

指针的+1能力

  • 普通指针:取决于变量的类型(char为1字节,short为2字节,int、long为4字节,long long为8字节)
  • 数组指针:取决于变量类型以及数组的大小之积。
c 复制代码
int arr[3];
int (*p1)[3]=&arr;//此时p1+1代表扩大3*4(int)字节
*(p1+1)=val;//此时val代表arr[3]的值
int (*p)[1]=val;此时val代表arr[1]的值
  • 如图,这是一个int类型的数组,int arr[3];现在要让每一次+1的能力变成移动一个格子,那么应该用什么指针?

    int arr[3];
    int *p=arr; //此时p+1的偏移量就为4个字节

  • 如果每次移动一个字节:
c 复制代码
int arr[3];
char *p=(char*) arr;//此时每次的q+1移动为1个字节
  • 每次移动的距离为整个数组的大小
c 复制代码
int arr[3];
int (*s) [3]=&arr;//此时每次p+1的距离为整个数组的字节数

指针数组

int*(p[3]),此时p时数组,数组元素为3个int *类型的指针。

const与指针的集合

可以将常量的地址赋给普通指针,即可以通过*来访问常量并修改。

  • 使用cost修饰指针p,即不能通过*p来修改p所指向的值。
cpp 复制代码
const int *p;或int const *p;
  • const修饰p,此时p指向不允许修改。
cpp 复制代码
int * const p;
  • p和*p都不允许修改。
cpp 复制代码
const int * const p;或 const *const p;
相关推荐
whoarethenext1 小时前
c/c++的opencv腐蚀
c语言·c++·opencv·腐蚀
嵌入式小能手3 小时前
Regmap子系统之六轴传感器驱动-完整驱动icm20607.c示例源码
c语言·开发语言
阿方.9185 小时前
《C 语言字符串操作从入门到实战(下篇):strncpy/strncat/strstr 等函数原理与实现》
c语言·c++·算法
学习噢学个屁5 小时前
基于51单片机教室红外计数灯光控制—可蓝牙控制
c语言·单片机·嵌入式硬件·51单片机
眸生8 小时前
自制操作系统day8 (鼠标数据取得、通往32位模式之路、A20GATE、切换到保护模式、控制寄存器cr0-cr4以及cr8、ALIGNB)
c语言·汇编·计算机外设·操作系统·i/o外设
叒卮8 小时前
小白刷题 之 如何高效计算二进制数组中最大连续 1 的个数
c语言·数据结构·学习·算法
二进制person9 小时前
初学c语言18(自定义类型:结构体)
c语言·开发语言
半桔9 小时前
【烧脑算法】单序列双指针:从暴力枚举到高效优化的思维跃迁
c语言·数据结构·c++·算法·面试·visual studio
看到我,请让我去学习16 小时前
数据结构—排序(斐波那契数列,冒泡,选择,插入,快速,归并,图,广度优先算法)
c语言·开发语言·数据结构·后端
时时三省16 小时前
【时时三省】(C语言基础)数组习题
c语言