Tag: 取消引用

char *的大小是否与int *的大小相同?

我知道:char *是一个指向char的指针。 和int *是指向int的指针。 所以,我想确认以下两件事: 所以现在假设我在32位机器上,那么这意味着内存地址是32位宽。 这意味着char *和int *的大小都是32位(4字节),对吧? char * *的大小也与int *的大小相同? 假设我有:int * ptr; 因此现在做*((char * *)ptr)= 0x154与*((int *)ptr)= 0x514相同,对吧? (0x514只是任意随机存储器地址) 平台:我在x86上。 PS:我知道类型转换不是建议的代码方式。 但我正在做内核编码,因此我必须做类型转换!

解除引用指针和访问数组元素之间的区别

我记得一个示例,其中演示了指针和数组之间的区别。 当作为函数参数传递时,数组衰减到指向数组中第一个元素的指针,但它们不等效,如下所示: //file file1.c int a[2] = {800, 801}; int b[2] = {100, 101}; //file file2.c extern int a[2]; // here b is declared as pointer, // although the external unit defines it as an array extern int *b; int main() { int x1, x2; x1 = a[1]; // ok x2 = b[1]; // crash […]

为什么我不能像C中的指针一样处理数组?

我在SO上看到了很多这个问题。 也许没有那么多的话……但是一次又一次地存在关于数组如何与指针不同的混淆。 所以我想我会花一点时间来问这个问题。 出于本Q&A的目的,我们将假设一个32位系统,并且已声明以下内容: char * ptr = “hello”; char arr[10] = “hello”; int iarr[10] = {0}; 这是一个问题列表,可以推测我在SO上看到的混乱。 当我看到新的问题时,我会添加到我的问答清单中(其他人也可以随意使用,如果您发现任何错误,请纠正我!) 指针和数组不是基本相同的东西吗? 跟进: *(ptr)和*(arr) ,或ptr[0]和arr[0]给出相同的东西,为什么? 为什么arr和&arr的价值相同? 跟进:为什么我得到一个不同的值打印arr+1 vs &arr+1 ?

指针算术:++ * ptr或* ptr ++?

我正在学习C语言,并且很困惑++*ptr和*ptr++之间的差异。 例如: int x = 19; int *ptr = &x; 我知道++*ptr和*ptr++产生不同的结果,但我不确定为什么会这样?