int a[5]={1,2,3,4,5}; int *p=(int*)(&a+1); printf("%d",*(p-1)); 答案为什么是5?

这个问题的关键是理解 &a 

a是一个数组名,也就是数组的首地址。对a进行取地址运算符,得到的是一个指向数组的指针!!!!这句话尤为重要!也就相当于int (*p) [5] = &a;p是一个指针,它指向的是一个包含5个int元素的数组!!

那么执行p+1后,p的偏移量相当于 p + sizeof(int) * 5 !!

而程序中强制将指针p转换成一个int* 那么 p -1 其实就是 p - sizeof(int)所以,p -1 指向了数组中得最后一个元素,也就是 5
时间: 2024-10-28 10:39:55

int a[5]={1,2,3,4,5}; int *p=(int*)(&a+1); printf("%d",*(p-1)); 答案为什么是5?的相关文章

C#的(int) /int.Parse()/int.TryParse()/Convent.ToInt32()的区别--推荐使用Int.TryParse()

一.(int)变量名[强制类型转换]:  该转换方式主要用于数字类型转换,从int类型到long,float,double,decimal类型,可以使用隐式转换,但是从long类型到int类型就需要使用显式转换,也就是该数据类型转换方式,否则会产生编译错误. 该方式对于浮点数会做无条件舍去,失去精确度.当然,该方式也可以进行object到int得转换,但是,object的值要赋予int类型的值,否则会产生编译错误,而且object为null时也会出错.最后切忌的一点,千万不要用来处理char类型

编写Java应用程序。首先,定义描述学生的类——Student,包括学号(int)、 姓名(String)、年龄(int)等属性;二个方法:Student(int stuNo,String name,int age) 用于对对象的初始化,outPut()用于输出学生信息。其次,再定义一个主类—— TestClass,在主类的main方法中创建多个Student类的对象,使用这些对象来测 试Stud

package com.homework.zw; //student类部分 public class Student { int stuNo; String name; int age; void output() { System.out.println("学号:"+stuNo); System.out.println("姓名:"+name); System.out.println("年龄:"+age); } } package com.hom

C#用int的0--31位表示32个bool值,int拆分成bool数组

使用位运算,直接上代码 public void IntToBoolArray() { bool[] bArray = new bool[32]; int inputNum = 3; int endNum; for(int i= 0;i<32;i++) { endNum = 1 << i; if(endNum == (endNum & inputNum)) { bArray[i] = true; }else { bArray[i] = false; } Debug.Log(bArr

numeric and int in sql server

类型映射 https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql-server-data-type-mappings C#关键字 decimal https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/decimal The decimal keyword indicates a 128-bit data type. Compa

整型变量(int)与字节数组(byte[])的相互转换

// int2byte.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <Windows.h> /* #define MAKEWORD(a, b) ((WORD)(((BYTE)(((DWORD_PTR)(a)) & 0xff)) | ((WORD)((BYTE)(((DWORD_PTR)(b)) & 0xff))) << 8)) #define MAKELONG(a, b) ((LONG

求int型数据在内存中存储时1的个数

1.求int型数据在内存中存储时1的个数 输入一个int型数据,计算出该int型数据在内存中存储时1的个数. 我们非常easy想到例如以下方法: #include <iostream> using namespace std; int main() { int n,cnt=0; cin>>n; while(n) { if(n%2==1) cnt++; n=n/2; } cout<<cnt<<endl; return 0; } 在对代码进行測试时输入负数无法得

Python函数-int()

int(x, [base]) 作用: 将一个数字或base类型的字符串转换成整数. int(x=0) int(x, base=10),base缺省值为10,也就是说不指定base的值时,函数将x按十进制处理. 注: 1. x 可以是数字或字符串,但是base被赋值后 x 只能是字符串 2. x 作为字符串时必须是 base 类型,也就是说 x 变成数字时必须能用 base 进制表示 实例: 1. x 是数字的情况: 1 int(3.14) # 3 2 int(2e2) # 200 3 int(1

C++中 int i 与 int &amp;i 注意事项

来源:http://blog.csdn.net/qianchenglenger/article/details/16949689 1.int i 传值,int & i 传引用 int i不会回带参数,而int &i可以回带参数,如 [cpp] view plain copy #include <iostream> void test1(int i) { i = 7; } void test2(int &i) //要限制参数改动,可以加const限制 { i = 7; }

对多维向量vector&lt;vector&lt;int&gt; &gt; vec进行操作

直接写作vector<vector<int> > vec在VC++6.0下编译不过改做:    typedef std::vector<int> ROW;    std::vector<ROW> vec;    vec[0][0] = 0;     vec[0][1] = 1; #include <iostream>#include <vector>using namespace std;int main(){     vector&

int指令(软件中断指令)

INT(软件中断指令)是CALL指令的一种特殊形式.call指令调用调用的子程序是用户程序的一部分,而INT指令调用的操作系统提供的子程序或者其他特殊的子程序. 中断服务子程序和标准过程的最大区别是 汇编程序可以有任意个过程,中断服务子程序最多有256个过程. INT指令共有四中不同的格式: <1>  int n n是中断号,这就允许用户程序调用256个中断服务子程序. 该指令2字节长度,第一字节是int机器码,第二字节是8位立即数,表示中断号. CPU在执行到INT指令时,通过中断描述符表找