给指针赋值
Assigning a value to a pointer
例如:
int *x;
x = func(a);
对于语句:x = func(a);
,我们是否说我们正在返回一个地址给x
?或者说,我们该怎么读呢?
EDIT: 是否有资格说我们正在返回指向x
的指针?如果有,你能解释一下具体是怎么做的吗?我的意思是,我们如何返回一个指针?
x
是指向int
的指针,所以换句话说,它是存储int
的内存位置的地址。因此,x = func(a)
意味着func
返回int
的地址,并将其存储在变量x
中。
注意不要返回在func
返回后内容未定义的局部变量的地址
RE:您的编辑:
编辑:是否有资格说我们正在返回指向x的指针?如果有,你能解释一下具体是怎么做的吗?我的意思是,我们如何返回一个指针?
是的,它当然符合条件。试着把指针当作其他数据类型来考虑和对待。实际上,它们只是内存地址。指针的返回方式与其他数据类型的返回方式相同。
以以下代码为例:
int* giveMeAPointer() {
return y;
}
int* x = giveMeAPointer();
说"y"被全局声明为:"int* y =…"。现在"x"所指向的内存地址与"y"所指向的内存地址是相同的。
现在我们假设"y"没有被声明为指针,而是作为普通的整型(例如:"int y = 5")。函数可以这样做并且仍然有效:
int* giveMeAPointer() {
int* result = &y;
return result;
}
*x
is指向内存中的int类型变量。所以函数func
应该返回int的地址。
int *x;
x = new int; // create your own int
*x = 5; // access - set it's value
delete x; // delete int - free memory
x = getGlobalCounter();
(*x)++; // increment global pointer
例如getGlobalCounter函数:
static int counter;
int *getGlobalCounter() {
return &counter; // return address of counter
}
但是删除从函数返回的对象并不总是好主意。在这种情况下,它应该导致运行时错误,因为计数器不是动态分配的int
,如上图所示。
如果要将变量的值赋给函数的返回类型,则该返回类型必须与变量的类型匹配。对于指针也是如此。
所以,如果你有:
int* myPointer;
和
int* func();
然后设置myPointer等于func()将改变"myPointer"指向的内存地址,为func()返回的内存地址。
x是一个指针,特别指向int型。所以很明显,这里使用了两个内存位置。一个用于指针,一个用于它指向的内存(假设指针不为空)。
指针本身保存一个内存地址,特别是它所指向的内存的位置。比如0xa456e4fa。
是的,func()返回一个指针。函数的原型如下所示:
int * func(someObj a); //I don't know the datatype of your parameter,
//so I'm just making something up.
注意返回类型是一个指向int型的指针。从这个和我之前说过的,它将返回什么应该是显而易见的。某种形式的0xyyyyyy,或者内存地址/指针。那个内存地址会进入到x指针中。
请记住,指针本身并不保存它所指向的数据,它只是地址。真的没有理由你不能返回一个指针。然而,你确实需要小心你返回的东西。您不希望返回局部变量的地址,因为一旦函数完成执行,该变量将超出作用域。你将返回一个无效的地址。然而,返回本地指针的值是可以的,因为你返回的值(地址)将被保留,它指向的内存也将被保留。
我也刚刚意识到我给你写了一本书。妈的,我累的时候肯定会闲晃。
语句只是读到x被赋值为函数func
返回的值。为了使代码没有错误地编译,函数应该返回一个地址。为了使代码像AlexFZ
所指出的那样执行,您应该注意func
没有返回函数的局部变量的地址。
这意味着func()返回一个int*类型的变量。
是否有资格说我们返回了一个指向x的指针?
不,我们返回一个指向整数的指针,并将其赋值给x,因为它是一个指针。
这是一个返回int指针
的示例代码int* func(int a)
{
int *y = &a;
return y;
}
- 全局作用域中函数指针的赋值
- 错误:在为指针赋值时,void值没有被忽略
- 关于 c++ 函数中指针赋值的简单问题
- VkSurfaceKHR 指针的值在函数调用后更改,无需任何显式赋值
- 在 Arduino 中为 2D 指针数组赋值
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 为什么通过指针赋值常量没有效果?
- 通过 lambda 在空指针处赋值
- 指针到指针算术:赋值
- 复制构造函数中的指针赋值
- 如何将值从指针永久赋值到变量
- 通过智能指针向类成员进行赋值
- 为什么在取消引用的指向接口的指针上使用赋值运算符不是编译器错误
- 将函数赋值给函数指针,常量参数正确性
- 为指针指向的地址赋值?C++
- C++ 包含唯一指针成员变量的类的赋值运算符
- 在类数据成员中赋值指针
- 有没有一种方法可以自动地赋值指针并增加计数器,而不需要锁?
- 赋值指针数组
- 如何在c++中赋值指针给this