此操作在64
位计算机上运行
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main()
{
/* Write C code in this online editor and run it. */
printf("Hello, World! \n");
int* p = (int*)malloc(sizeof(int));
printf("int = %d\n",p);
printf("int+1 = %d\n",(p+1));
char* p_new;
p_new = (char*)p;
printf("char = %d\n",p_new);
assert(printf("char+1 = %d\n",(p_new+1)));
int* p_new2;
p_new2 = (int*)p_new;
printf("转换回int = %d\n",p_new2);
printf("int+2 = %d\n",p_new2+2);
int** p_i;
int** p_i_2;
char** p_c;
p_i = &p;
p_i_2 = &p_new2;
p_c = &p_new;
printf("----指针本身的地址----\n");
printf("p = %d\np_new2 = %d\np_new = %d",p_i,p_i_2,p_c);
printf("\n----分别+1后的指针地址----\n");
printf("p = %d\np_new2 = %d\np_new = %d",p_i+1,p_i_2+1,p_c+1);
free(p);
printf("free后 p = %d",p);
return 0;
}
指向char
数据类型的char指针,移动一位为1
个字节
指向int
数据类型的int指针,移动一位为4
个字节
指针自身的地址在64
位计算机上为8
个字节,在32
位计算机上为4
个字节
Hello, World!
int = 5808752
int+1 = 5808756
char = 5808752
char+1 = 5808753
转换回int = 5808752
int+2 = 5808760
----指针本身的地址----
p = -1991094848
p_new2 = -1991094864
p_new = -1991094856
----分别+1后的指针地址----
p = -1991094840
p_new2 = -1991094856
p_new = -1991094848
free后 p = 5808752
将int
数据类型用char*
指针指向不会报错,但用char*
指针+1
一位会出现问题
释放内存空间后,指针仍然指向该区域