目录
1.指针变量的⼤⼩
2 指针的解引⽤
3指针+-整数
1.指针变量的⼤⼩
指针变量的大小和编译器的位数有关系,例如vs2022的 x64 就是64位, x86 就是 32位
当两个同时运行一个代码的时候就会有差异。
当我在运行x86的时
总结:
在x86 环境运行下得出指针变量大小是 4
在x64环境下运行结果是 8
当我在x86环境下把 int 类型改成 char 类型
在x64环境下 int 类型和char 类型一样
下面结论得出:
在x86/ x64环境下 指针变量的大小不会因为指针的类型而改变,而是随编译器的环境而改变的。
在x86/64 就是 4/8字节
2 指针的解引⽤
在下面观察的内存中的变化
当程序走完后就会发现 值发生了变化
而如果将 int 改成char 就会有差异了。
如果你想要访问一个字节的指针 可以使用char *的指针,想要访问4个字节的指针可以选择int *指针。
3指针+-整数
#include <stdio.h>
int main(){int a = 0x11223344;int* pi = &a;char* pc = &a;printf("&a =%p\n ", &a);printf("pc =%p\n ", pc);printf("pi =%p\n ", pi);printf("\n");printf("&a+1=%p\n ", &a + 1);printf("pi+1=%p\n ", pi + 1);printf("pc+1=%p\n ", pc +1);return 0;
}
我们可以看出, char* 类型的指针变量+1跳过1个字节, int* 类型的指针变量+1跳过了4个字节。 这就是指针变量的类型差异带来的变化。指针+1,其实跳过1个指针指向的元素。指针可以+1,那也可 以-1。
结论:指针的类型决定了指针向前或者向后⾛⼀步有多⼤(距离)
#include <stdio.h>
nt main()
{int a = 20;char c = 'w';void *pa = &a;void* pc = &c;//*pc = 200;//在给pa改变值时候就无法使用了return 0;
}
在上⾯的代码中,将⼀个int类型的变量的地址赋值给⼀个char*类型的指针变量。编译器给出了⼀个警 告(如下图),是因为类型不兼容。⽽使⽤void*类型就不会有这样的问题。
那么 void* 类型的指针到底有什么⽤呢? ⼀般 void* 类型的指针是使⽤在函数参数的部分,⽤来接收不同类型数据的地址,这样的设计可以 实现泛型编程的效果。使得⼀个函数来处理多种类型的数据