c语言-int型指针转成short型指针 然后自加一 地址移动四位?

问题描述

int型指针转成short型指针 然后自加一 地址移动四位?

一个int型指针强制转换成short型 然后自加一 为什么地址还是移动四个字节
而不是两个字节?
想不明白

解决方案

不同的编译器不同。一些编译器,为了优化处理器对内存的访问,所有的变量按照4字节对齐。
我这里是2
http://codepad.org/lNNoQMVC

#include <stdio.h>

int main()
{
    int * ptr = 0;
    short * sptr = ((short *)ptr + 1);
    printf("%d %d", (int)ptr, (int)sptr);
}

0 2

还有可能,你的括号打错了,导致先算了加1,然后才强制转换。

解决方案二:

强制转换如果是临时的,就不会有效果啊~

解决方案三:

我也遇到过这样的问题

解决方案四:

还是要看你代码是怎么写的

解决方案五:

贴出你的代码,程序这种问题有时候的具体代码具体分析

时间: 2024-10-21 16:39:27

c语言-int型指针转成short型指针 然后自加一 地址移动四位?的相关文章

gson默认将int型转换成double型怎么解决?

问题描述 gson默认将int型转换成double型怎么解决? android中gson解析的数据库id如:1:2:3:会变成1.0:2.0:3.0:每个int型都会变成double型,这个应该怎么解决? 解决方案 不是使用getInt()吗,怎么会解析成double? 解决方案二: 是你的字段定义的是double型吧,否则不会乱转换的,看你代码中或数据库中是否为double

深入const int *p与int * const p的区别详解(常量指针与指向常量的指针)_C 语言

对于指针和常量,有以下三种形式都是正确的: 复制代码 代码如下: const char * myPtr = &char_A;//指向常量的指针char * const myPtr = &char_A;//常量的指针const char * const myPtr = &char_A;//指向常量的常量指针 下面依次对这三种类型进行介绍.因为*操作符是左操作符,左操作符的优先级是从右到左,对于1.常量指针(Constant Pointers) 复制代码 代码如下: int * con

C语言基础(一)之数据类型及指针

  C的基本数据类型包括:字符型(char).整形(int/short/long)和浮点型(float/double).        导出数据类型包括:T*(指针类型),enum(枚举),struct{....}(结构体类型),union{...}(共用体类型),T[...]数组类型,文件类型和函数类型   c语言输入输出函数: %d    int %ld   long   int %c     char %f      float %lf      double %x      十六进制输出

C语言const指针和指向const的指针的理解

1.const 的理解     const 是C语言(C++)的一个关键字,需要注意的是,const 关键字是把变量变为一个只读的变量,绝对不是将这个变量变为常量.也就是说经过const 修饰的变量成为只读的变量之后,那么这个变量就只能作为右值(只能赋值给别人),绝对不能成为左值(不能接收别人的赋值).       经过const 修饰的变量,在定义的时候,就要进行初始化. const int a = 10;  // 正确 const int a;  // 错误       const 关键字最

c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求

问题描述 c语言先用scanf初始化了一个字符指针,之后再定义字符数组出现内存不可读,在线等,急求 #include #include int main() { char*s; scanf("%s",s); //printf("%sn",s); //int n = strlen(s); //printf("%dn",n); char ret[56]; return 0; } 解决方案 s只是指针变量,没有分配内存 char*s; s = mall

各种数字类型转换成字符串型--JAVA

转换|字符串 各种数字类型转换成字符串型: String s = String.valueOf( value); // 其中 value 为任意一种数字类型. 字符串型转换成各种数字类型: String s = "169"; byte b = Byte.parseByte( s ); short t = Short.parseShort( s ); int i = Integer.parseInt( s ); long l = Long.parseLong( s ); Float f

【c语言】2维数组求平均值,指针出问题了

问题描述 [c语言]2维数组求平均值,指针出问题了 double average(double (*p)[],double *q,int n,int m) { int i,j; double NU,AE;//每列总和与每行总和 for(i=0;i<n;i++) { for(NU=0,j=0;j<m;j++) { NU+=(*p+i)[j];//每列的和 } q[i]=NU/m;//每行的平均值 AE+=NU;//每行的和 } return AE/(n*m);//总平均值 } 第一行的平均值没错

「C语言回顾之旅」第一篇:指针详解

说明:     最近学校课程开设了<数据结构>的课程,无疑,数据结构的重要性在IT生涯的进阶路上是不可置疑的,也常说,数据结构是专业性与非专业性的分界线.所以无论以后走的是什么方向,毕竟是读计算机专业的,所以必须学好数据结构的.虽然目前我给自己定的方向是走运维/系统架构方向的,可有句话说得好,不懂开发的运维注定会被淘汰,在IT这一行,要让自己变得更加强大.最近也一直在学Python,感觉还不错,学数据结构相信对自己也肯定有好处的,对一些较为底层的知识有些了解和理解,这样才能走得更远!     

在想能不能把c++命名空间的名称开成数组型

问题描述 在想能不能把c++命名空间的名称开成数组型 最近比较困扰一个问题 就是在能不能把命名空间的名字开成数组型比如说我定义了两个命名空间 namespace solar0 和 namespace solar1然后在一个函数中使用 比如说在函数 void system(int k) 中选择性使用 比如 void system(int k){ if(k==0) using namespace solar0; if(k==1) using namespace solar1; .........}