美文网首页初见
C语言中的 * 和 &

C语言中的 * 和 &

作者: Dezi | 来源:发表于2020-06-22 13:57 被阅读0次

宏定义

#define DZNSLog(format, ...) printf("%s\n", [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);

1. 值拷贝

值拷贝:虽然赋值相同,但地址不同。

a = 10;
b = 10;
DZNSLog(@"%d -- %p",a,&a);
DZNSLog(@"%d -- %p",b,&b);
/**
打印:
10 -- 0x7ffeefbff4fc
10 -- 0x7ffeefbff4f8
*/

2. 指针拷贝

指针拷贝:p1和p2虽然是同一个对象,但开辟空间地址不同,指针地址也不同。
而p2和p3是p3指针指向p2指向的内存空间,所以是指针不同但内存地址相同。

DZPerson *p1 = [DZPerson alloc];
DZPerson *p2 = [DZPerson alloc];
DZPerson *p3 = p2;
DZNSLog(@"%@ -- %p",p1,&p1);
DZNSLog(@"%@ -- %p",p2,&p2);
DZNSLog(@"%@ -- %p",p3,&p3);
/**
打印:
<DZPerson: 0x10064eb50> -- 0x7ffeefbff4f0
<DZPerson: 0x10064e960> -- 0x7ffeefbff4e8
<DZPerson: 0x10064e960> -- 0x7ffeefbff4e0
*/

3. 数组指针

数组指针:

  • 因为数组是连续的,所以数组的地址就是第一个元素的地址。
  • 又因为数组是连续的,所以指针相加就是内存偏移,d+1就是数组向右偏移1个元素位置大小,也就是&d[1]。
int c[4] = {1,22,333,4444};
int *d   = c;
NSLog(@"%p - %p - %p - %p",&c,&c[0],&c[1],&c[2]);
NSLog(@"%p - %p - %p",d,d+1,d+2);

for (int i = 0; i<4; i++) {
    // int value = c[i];
    int value = *(d+i);
    DZNSLog(@"%d, ",value);
}

NSLog(@"指针 - 内存偏移");
/**
0x7ffeefbff510 - 0x7ffeefbff510 - 0x7ffeefbff514 - 0x7ffeefbff518
0x7ffeefbff510 - 0x7ffeefbff514 - 0x7ffeefbff518
1 == 1
22 == 22
333 == 333
4444 == 4444
*/

*为取内容,但在定义的时候表示定义一个指针,*p代表地址为p的内存里所存储的数据;
&表示取地址,每一个变量都有一个对应的存储地址,&a就是a所在的内存地址。

相关文章

  • python关于&&和||的问题

    &&和||是多数高级语言中通用的逻辑运算符,表示并和或,诸如C语言、C++、JAVA等主流语言但是在python语...

  • c语言中#和##

    本文主要讲述c语言中#和##的用法 # # 将右边的参数做整体的字符串替换。对于#的参数,即便是另一个宏,也不展...

  • C语言中的 * 和 &

    宏定义 1. 值拷贝 值拷贝:虽然赋值相同,但地址不同。 2. 指针拷贝 指针拷贝:p1和p2虽然是同一个对象,但...

  • C语言基础6

    结构体概述 1 在C语言中,结构体(struct)指的是一种数据结构,是C语 言中构造类型的其中之一。 2 在实际...

  • C++的输入和输出与标准输出流

    一、C++的I/O对C的发展—类型安全和可扩展性 C语言中I/O存在问题: 1、在C语言中,用prinff和sca...

  • OC简介

    OC与C对比 1. 源文件对比 C语言中常见源文件.h头文件,.c文件.h 头文件,用于存放函数声明.c C语...

  • C语言- 字符、字符数组

    字符数组和字符串 C语言中没有字符串这种数据类型,C语言中通过char型数组来替代字符串的功能。C语言中的字符串一...

  • C语言中"%"和"/"的区别

    % 是取余运算符 比如2%3=2 4%3=1 / 是整除运算符 比如 2/3=0, 10/3=3

  • C++ 输入输出(cin 和 cout)

    在 C 语言中,我们通常会使用 scanf 和 printf 来对数据进行输入输出操作。在C++ 语言中,C 语言...

  • c语言中static关键字用法详解

    概述 static关键字在c语言中比较常用,使用恰当能够大大提高程序的模块化特性,有利于扩展和维护。 但是对于c语...

网友评论

    本文标题:C语言中的 * 和 &

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