我要问一些关于指针的问题;一个理论问题和一个实践问题。
为什么在用C声明指针时,我必须在*var前面加上一个类型。如果指针只是一个包含内存地址的变量,那么编译器/语言为什么需要更多的信息而不是指针呢?int *和char *之间的区别是什么?这是否意味着int *指向包含2-4字节内存和char *仅包含1的某个位置?我从未读过任何关于类型为什么重要的基本推理,如果它最终是一个变量,通过%p打印它们作为证据指向某个十六进制数。
第二,给定以下代码
int t = 10;
int *i = &t;
int *j = i;
--
*i == 10;
*j == 10;为什么*j等于10而不是**j等于10?如果j是一个指向i的指针,它是一个指向t的指针,它是10,难道我不需要双倍取消引用变量j吗?在用xcode编写这段代码时,它迫使我使用*j。
因此,这些是我对指针的混淆的几个例子。
发布于 2015-10-31 20:26:49
为什么编译器/语言需要比它是指针更多的信息?
要只使用指针,编译器不使用。类型void*意味着“指向任何事物的指针”。
然而,要使用所指向的值,编译器需要知道所指向的值的类型,以便它知道可以用它做什么。删除void*将导致编译器错误,除非首先将其强制转换为类型化指针。
第二,给定以下代码
j不是指向i的指针。赋值int *j = i;将j设置为与i相同的值,后者是t的地址(因此j现在指向t)。
要使j成为指向i的指针,需要将其声明为int **j = &i;
发布于 2015-10-31 20:27:56
需要数据类型才能知道取消引用指针时要读取多少字节。
int *i = &t;在这里,存储在i中的值是t的地址。
int *j = i;所以现在,存储在j中的值是存储在i中的值,它是t的地址。如果要执行双重取消引用,则需要存储i的地址。
int **j = &i
发布于 2015-10-31 20:31:20
为什么编译器/语言需要比它是一个指针更多的信息。
这是因为不同的数据类型具有不同的大小,需要数据类型的大小来分配内存。
int *和char *之间的区别是什么?
int *是指向int的指针,char *是指向char的指针。
为什么*j等于10而不是**j等于10?如果j是一个指向i的指针,它是一个指向t的指针,它是10,难道我不需要双倍取消引用变量j吗?
int *j = i;告诉编译器将j声明为指向int的指针,并将该指针指向指针i指向的内存位置。因此,j是指向变量t的指针。
https://stackoverflow.com/questions/33456201
复制相似问题