如何声明和分配指针
how to declare and assign pointer
我想用一个值(如1000
)声明并初始化一个指针,我不想使用第二个变量。请参阅以下内容:
int *p = &1000;
Output: error : & on Constant
int *p = (int *)1000;
Output: 0000003E8
int *p = new int(1000);
Output: 1000
由于,前两种方法没有给出预期的输出。所以,我想知道,哪种方法是正确的,为什么?
参考
指针的整个点(并非双关语)是指向另一个变量(或者至少指向某个内存),可以是动态分配的内存块,如第三个示例中所示,而不是实际的变量。
尝试用整数文本初始化它根本没有多大意义。只有在极其有限的情况下,用整型转换为指针类型来初始化它才有意义——它使您能够直接读取/写入该绝对内存地址。这在一个小型嵌入式系统上是有意义的,它可能有一个内存映射设备,你可以在该地址访问它。否则,它几乎毫无意义和用处。
顺便说一句:你实际上是在定义一个指针,而不仅仅是声明它
extern int *p;
这告诉编译器在其他地方定义的指针的存在(即,在其他翻译单元中)。它最常出现在页眉中。由于它只是告诉编译器关于指针的信息,因此不能包含声明。
根据您的评论,
当我尝试*p时,它显示1000。现在,不管你有什么。
您希望初始化指针,使其指向存储整数1000
的位置。您不想初始化指针,使其指向绝对地址1000
。
在你提供的三行代码中,只有最后一行能满足你的要求:
int *p = new int(1000);
这为堆上的int
分配空间,并且值用1000
初始化该空间。
注:
为堆上的单个
int
分配空间有时可能是必要的,但大多数时候都没有用,因为int
是一个非常小的对象。指针很可能同样大或更大,因此绕过指向int
的指针,而不是绕过int
本身,用途有限。如果你真的认为你需要这个,请记住,你稍后需要使用来释放这个空间
delete p;
一般来说,在大多数情况下,您需要在堆上分配空间并维护指向它的指针,最好使用智能指针(如C++11中的
std::unique_ptr<int>
或std::shared_ptr<int>
),以避免不得不考虑释放。
运算符的地址不能应用于引用页中提到的常量。
目前还不清楚为什么要以这种方式初始化指针。最好将常量分配给另一个变量,并在它们上使用运算符的地址。
如果指针值将在代码中的某个位置更改,那么最好使用NULL初始化指针。
第一个是错误的(正如公认答案和编译器所指出的)
第二个似乎是正确的,但我不确定你显示了什么。您可能显示的是由p表示的地址,而不是它的值。试着显示*p而不仅仅是p
第三个似乎是正确的,但只适用于C++而不是C
编辑:
这就是你将如何实现周的答案
int a = 1000;
int *p;
p=&a;
int*p=new int;*p=1000;
这就是你想要的。第一个字符串为一个整数分配内存,第二个字符串用1000初始化它。当您在程序中不再需要p时,请不要原谅写"delete p;"来释放与p相关的内存。
#include<stdio.h>
int main()
{
int *ptr = (int *)1000;
printf("%dn", ptr);
return 0;
}
但这不是为指针赋值的正确方式。
int *p = &1000; /*You cannot use & of 1000 As 1000 is the numeric constant not the address of any variable*/
int *p = (int *)1000; /*You are trying to do casting the value into the pointer so the pointer p will hold the address 0x000003e8 and the address will be pointing to some garbage value*/
int *p = new int(1000); /*In this statement you are trying to allocate the address of some variable form heap and storing a "1000" in that address*/
- 通过双指针分配指针
- 在不工作的情况下为数组分配指针,但反过来也可以
- 无法使用"std::make_shared"分配指针
- 分配指针时出现分段错误
- 为什么有时仅使用Ampersand运算符在C 中分配指针
- 重新分配指针阵列的一部分的安全方法
- 为什么在执行增量操作之前分配指针值
- 当指针指向的对象被另一个类的实例删除时,重新分配指针
- 在堆上分配指针的原因是什么?
- 有没有办法防止分配指针?
- 将运算符重写应用于具有动态分配指针的类
- 在堆上分配指针数组
- 在另一个结构中的结构内解除分配指针
- 分配指针后,是否可以为指针指向的事物分配变量名称?
- 重新分配指针后,将类功能与指针一起使用
- 为什么我的新分配指针会自动在程序退出上删除
- 分配指针的方法之间有什么区别?
- 如何声明和分配指针
- 内存分配(指针和堆栈)
- 通过参数分配指针的值