C语言随笔3:指针定义、数据在地址中的大小端排列

指针变量:用于存放另一个变量的地址

(指针变量所占空间大小由操作系统决定32/64位  4/8字节

声明且定义:int  *p=&a;

声明、定义:int  *p; p= &a;

Double *p =d;

(int)(p+1)-(int)p = 8;

P指针变量所代表地址 指向 double类型变量,所以p+1,是在double基础上,偏移8个字节地址。

不同类型的指针的区别:就在于+1始偏移量的不同。本质 都三

超过1字节地址存放的变量,按照大小端格式在内存地址中排列

若p = 0x0010000;p+1 = 0x0010008;

关于大小端:

大端字节序: 高位字节数据存放在内的低地址处,低位数据存放在内的高地址处;
小端字节序: 高位字节数据存放在内的高地址处,低位数据存放在内的低地址处;

例如:0x01234567;01是高位

按照小端格式排列:

67|   
    45|       23|         01;

0x0010000;0x0010001;0x0010002;0x0010003;

若内存上按照顺序排列对象为:

01 23 45 67 89 ab
cd ef

0x0010000---0x0010007;

P=(Double *)0x0010004;(需为合法地址)

A=*p;

A的内容:A= 0x ef cd ab 89;(小端)

原文地址:https://www.cnblogs.com/yyyyloveu/p/12233332.html

时间: 2024-10-12 09:21:20

C语言随笔3:指针定义、数据在地址中的大小端排列的相关文章

可读性很强的C语言的函数指针定义

通常C/C++程序里面要用到大量的指针,其语法非常难以阅读.比如下面的vp指针类型: #include <iostream> using namespace std; typedef void (*vp) (float&,float&); void foo(float &a,float &b) { a = a + b; } int main() { // float a=1; float b=2; vp t=&foo; t(a,b); cout <

一起talk C栗子吧(第一百五十二回:C语言实例--计算机中的大小端)

各位看官们,大家好,上一回中咱们说的是socket通信地址的例子,这一回咱们说的例子是:计算机中的大小端 .闲话休提,言归正转.让我们一起talk C栗子吧! 大小端据说来源于小说<格列佛游记>,书中说:人们在争论打开鸡蛋的方式是从鸡蛋的大端还是小端打开鸡蛋.争论不休,甚至还引起了战争.你说说,不管你从哪一端打开鸡蛋,打开的都是鸡蛋呀,这有什么可以争论的呢?还要通过战争来解决.大家不必关注这个争论,如果真想了解其中的细节,可以看看这部小说.不过在计算机中的大小端就不像小说中争论打开鸡蛋那么简单

【c语言】用指针变量输出一维数组中的数据

#include<stdio.h>void main(){    int i,*m,a[5];    printf("数组:"); //普通方式输出数组的元素    for(i=0;i<5;i++){        a[i]=rand()%100;            printf("%-4d",a[i]);    }    printf("\n");    m=&a; //指针变量输出数组的元素    for(i=0

c语言数组与指针详解(上)

彻底搞懂c语言数组与指针 部分引用 c语言指针怎么理解 知乎 程序设计入门----c语言 (浙江大学翁恺) <c primer plus>第六版 基础知识 1. 指针基础 &:代表对变量取地址 int*或char*或者把这个星号紧贴着变量比如int *a = &b: 代表新建一个用来储存地址的变量,这也代表&b这个值的类型是int*. int *a, b 或 int* a, b 中只有a是int指针类型,b是int整型. 关于电脑大小端的讨论:大端是指是指数据的高字节,

C语言之大小端问题

1:大小端名字的由来及发展 (1)在乔纳森·斯威夫特的著名讽刺小说<格列夫游记>中,小人国内部分裂成Big-endian和Little-endian两派,区别在于一派要求从鸡蛋的大头把鸡蛋打破,另一派要求从鸡蛋的小头把鸡蛋打破.斯威夫特借以讽刺英国的政党之争,在计算机工业中指数据储存顺序的分歧. (2)后来计算机通信发展起来后,遇到一个问题就是:在串口等串行通信中,一次只能发送1个字节.这时候我要发送一个int类型的数就遇到一个问题.int类型有4个字节,我是按照:byte0 byte1 by

Linux程序设计学习笔记----网络编程之网络数据包拆封包与字节顺序大小端

网络数据包的封包与拆包 过程如下: 将数据从一台计算机通过一定的路径发送到另一台计算机.应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示: 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据包(packet),在链路层叫做帧(frame).数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理. 上图对应两台计算机在同一网段中的情况,

4字节十六进制数据和大小端传输

甲方使用的后台要求“整型数据采用小端传输”,大部分数据是4字节十六进制,有一些是2字节十六进制. 关于大小端传输,简单来说可以这样认为. 内存中低地址存最低有效字节的形式为小端传输 内存中低地址存最高有效字节的形式为大端传输 例如一个4字节十六进制数"0x11223344",装入QByteArray中. 如果取出结果如下 buff[0] == 0x44; buff[1] == 0x33; buff[2] == 0x22; buff[1] == 0x11; 这里的"0"

C语言中指针定义的字符串和数组定义的字符串的区别

2016-12-03 数组定义字符串: 每次定义数组的时候,系统都会在内存开辟你指定数组大小的空间,并且数组中的内容对于我们是可读可写的,看如下代码: 1 #include<stdio.h> 2 int main() 3 { 4 char str[100] = "hello world"; 5 char str1[100] = "hello world"; 6 str[0] = 'd'; 7 printf("%s\n\n",str);

C语言随笔5:函数、函数指针

函数 C语言中函数参数传递时,将实参的值拷贝到函数参数的存储区中.这种传递参数的方式称为按值传递. 函数不会访问实参本身,访问的是函数存储在栈区的副本,不会改变实参.函数凋用结束,函数在栈区的内容释放. 若要改变实参本身.需用指针传递待修改变量的地址,使函数参数保存该变量地址的值.然后在函数中,通过参数保存的地址间接访问待修改的变量.大部分书籍,将这种做法称为按址传递或按引用传递.实际上,这种传递方式仍然是按值传递,只不过传递的是地址的值. 非void的函数,返回值不能做为左值. 因为函数返回值