美文网首页
C语言指针

C语言指针

作者: YanZi_33 | 来源:发表于2020-12-14 20:24 被阅读0次
指针的定义
  1. 指针的本质就是内存地址;
  2. 指针变量存储的是指针,也就是存储内存地址的变量;
  3. 在计算机世界中,内存地址其本质也是一个整型数值;也就是说指针变量的值是一个整数.
指针的声明
int *p1;

上述是声明了一个指向int类型的指针变量p1;

指针的先声明然后再初始化
int a = 100;
int *p1;
p1 = &a;
指针的声明与初始化
int a = 100;
int *p1 = &a;
指针变量在内存中所占的字节数
int a1 = 100;
char a2 = 'a';
float a3 = 1.23;
int a4[5] = {1,2,3,4,5};
    
int *p1 = &a1;
char *p2 = &a2;
float *p3 = &a3;
int(*p4)[5] = &a4;
    
NSLog(@"a1=%lu/a2=%lu/a3=%lu/a3=%lu",sizeof(a1),sizeof(a2),sizeof(a3),sizeof(a4));
NSLog(@"p1=%lu/p2=%lu/p3=%lu/p3=%lu",sizeof(p1),sizeof(p2),sizeof(p3),sizeof(p4));
Snip20201215_4.png

本人使用的是Xcode开发工具,测试机是真机iPhone7,真机的系统版本为13.3.1;
从控制台的打印结果来看\color{red}{指针变量在内存中占用8个字节}.

与指针相关的运算符
  1. 取址运算符
  • 格式: &变量名
  • 含义: 取变量的内存地址
  1. 取值运算符
  • 格式: *指针名/内存地址名
  • 含义: 取出内存地址中存储的值
//声明一个整型变量a并初始化为100
int a = 100;
//声明一个指向整型变量的指针变量p;
int *p;
//初始化指针变量p
p = &a;
*p = 300;
    
NSLog(@" a的地址=%p -- p的地址=%p -- p的值=%p",&a,&p,p);
NSLog(@" 取出指针中的存储值 = %d",*p);
NSLog(@" a = %d",a);
Snip20201216_21.png

从控制台的打印结果来看:

  • 变量a的地址与指针变量p的值相等,表明指针变量的值就是变量的内存地址;
  • *星号运算符有两种含义:
    第一: 在指针变量的声明中,表明变量是存储内存地址的变量即指针变量;
    第二: 在指针变量声明初始化之后,取出指针变量所指向内存地址中的值,即取值运算;
    第三: *p = 300,是指修改p所指向的内存地址中的值,即修改变量a的值.
  • \color{red}{打印内存地址所用的占位符为百分号p}
指针的运算
  1. 加法/减法运算
int a = 100;
int *p;
p = &a;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
p = p + 1;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
p = p + 1;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
p = p + 1;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
Snip20201215_6.png

更改变量的数据类型为char类型

char a = 'a';
char *p;
p = &a;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
p = p + 1;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
p = p + 1;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
p = p + 1;
NSLog(@"指针的值=%p -- 指针中存储的值 = %d",p,*p);
Snip20201215_7.png
  • 首先int类型数据在内存中占用4个字节,char类型数据在内存中占用1个字节;
  • 当指针变量指向int类型数据时,指针变量+1或者-1,其指针变量的值 +4或者-4;
  • 当指针变量指向char类型数据时,指针变量+1或者-1,其指针变量的值 +1或者-1;
  • 所以指针变量+1或者-1,其指针变量值的变化与其所指向数据类型在内存中所占的字节数相关.
指针变量,指针常量,常量指针,常量指针常量之间的区别
  • 指针变量: 指针的值(指针的指向)可以改变,可以通过指针去修改变量的值;
  • 指针常量: 指针的值(指针的指向)不能改变,可以通过指针去修改变量的值;
  • 常量指针: 指针的值(指针的指向)可以改变,不能通过指针去修改常量的值;
  • 常量指针常量: 指针的值(指针的指向)不能改变,不能通过指针去修改常量的值;
//变量 值可以改变
int a = 100;
int b = 500;
a = 200;
//常量 值不可以改变
const int c = 200;
const int d = 400;
c = 700; //报错

//指针变量
int *p1 = &a;
p1 = &b;
*p1 = 600;

//指针常量 指针的值固定
int * const p2 = &b;
*p2 = 900;
p2 = &d //报错
    
//常量指针 指向常量的指针
const int * p3 = &d;
p3 = &c;
*p3 = 600; //报错
    
//常量指针常量
const int * const p4 = &a;
p4 = &b; //报错
*p4 = 1000; //报错

相关文章

  • C语言05- 指针

    C语言05- 指针 13:指针 指针是C语言中的精华,也是C语言程序的重点和难点。 13.1:指针定义与使用 指针...

  • 02-C语言的指针

    02-C语言的指针 目标 C语言指针释义 指针用法 指针与数组 指针与函数的参数 二级指针 函数指针 指针在C中很...

  • C语言指针总结大学霸IT达人

    C语言指针总结大学霸IT达人 C语言的指针是C语言区别其它语言的最主要的特定之一。有了指针,C语言就可以抛开所有束...

  • 带小白学C语言指针

    C语言里指针才是C语言的开始和指针;C语言里基本所有东西都是由指针演变而成; 指针是指向地址的变量,类型就是指针...

  • 在Swift中使用C语言的指针

    在Swift中使用C语言的指针 在Swift中使用C语言的指针

  • [Swift]结构体指针操作

    C语言的指针操作 在c语言中申明一个变量并通过指针修改该变量的值 a value is 2 c语言操作结构体指针操...

  • Go语言-指针

    Go语言中的指针不同于C语言,Go语言的指针使用方法要简单很多。当然和C语言从指针定义到指针的使用都有很大的不同。...

  • C语言中的指针与数组

    C语言中的指针与数组 @(C语言)[排序算法, 快速排序, C实现] 引言 相信指针与数组是不少同学在初学C语言时...

  • 指针数组和数组指针

    指针数组|存储指针的数组 在C语言和C++语言中,数组元素全为指针的数组称为指针数组。 例如:int *p[10]...

  • iOS开发 -- C语言基础8(指针)

    iOS开发 -- C语言基础8(指针) 指针是C语言中非常重要的数据类型,如果你说C语言中除了指针,其他你都学得很...

网友评论

      本文标题:C语言指针

      本文链接:https://www.haomeiwen.com/subject/gpjbgktx.html