如果是int *p,答案可能是0x7f6c5b32(如16bit DSP),可能是0x7f6c5b34(如32bit winxp),可能是0x7f6c5b38(如64bit Linux SUSE); 如果是void *p呢? ANSI C 规定,不可以对void指针进行运算操作,因为我们不知道指针指向的数据类型大小,无法进行偏移; 但, GNU规定,void指针的运算操作与char型保持一致; 因此,...
错误的原因是你输出b[0]的时候用的是%d,如果用%f就没有问题了,如下:printf("sizeof(b[0])=%d\n b[0]=%f &b=%d b=%d\n",sizeof(b[0]),b[0],&b,b);具体原因是因为printf是个变长参数函数,也就说,printf函数的参数是不确定的,要依据第一个参数,也就是“sizeof(b[0])=%...
文件指针操作主要有以下几个函数,在进行地址偏移计算时用得到。 void rewind(FILE *stream); - 设置文件位置为给定流 stream 的文件的开头。 long int ftell(FILE *stream); - 返回给定流 stream 的当前文件位置。 int fseek(FILE *stream, long int offset, int whence); - 设置流 stream 的文件位置为给定...
当某个指针是void型指针时,所指向的对象不属于任何类型。 因为void指针不属于任何类型,不可以对其进行算术运算,比如自增,编译器不知道其自增需要增加多少。 而对于char *型指针,自增一定是指针指向的地址加1,int*型指针自增,则偏移4。这个在指针的运算中p+n的解释中已经很详细的介绍过,这里不再累赘,有兴趣的...
记得我在校园里学习C语言的时候,南师大的黄凤良老师花了大半节课的时间给我们解释指针,现在最清楚地记得老师说过的一句话就是:指针就是地址,地址就是指针! 二、八个示例 1. 开胃菜:修改主调函数中的数据 // 交换 2 个 int 型数据 void demo1_swap_data(int *a, int *b) ...
void指针 c语言 方法/步骤 1 一个由C/C++编译的程序占用的内存分为以下几个部分:1、栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,...
void指针 使用void类型指针要注意的几条规则: void*类型只有地址信息没有类型信息,所以不能计算偏移。 C/C++中的指针通常来说有两个属性: 1.指向变量 2.指向对象的地址和长度 指针其实就是存储被指向变量的地址,并不保存其长度; 而且存的这个地址仅是变量的首地址,并不是该变量占据内存的所有地址空间。如: ...
指针移动:多级指针运算也是以其目标变量为单位进行偏移。 #include<stdio.h>intmain(intargc,charconst*argv[]){char*p[] = {"beijing","shanghai","guangzhou"};char**q; q = p;puts(q[1]);return0; } void指针 void指针是一种不确定数据类型的指针变量,它可以通过强制类型转换让该变量指向任何数据类...
// 地址偏移(正常) int *p2 = (int *)p1; printf("%d ", p2++); } | 典型应用 void*类型的指针其实本质就是一个过渡型的指针状态,在编写框架的时候就可以在不确定输入的时候使用,典型的应用有两种: 函数传参时不确定类型,或者要支持多类型的传参 ...