Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指针与变量,目标-C_C_Objective C - Fatal编程技术网

指针与变量,目标-C

指针与变量,目标-C,c,objective-c,C,Objective C,我很难掌握一些概念。谢谢你的帮助 假设您有以下代码: int *intPtr; // creates a pointer int count = 10; // initiates an intiger variable intptr = &count; // ?? int count; &运算符为变量提供地址,在本例中为整数计数。然后将地址分配给intptr。我的问题是:为什么是intptr=count不足。我知道,count是一个变量,intptr是一个指针,但变量不也是指内存

我很难掌握一些概念。谢谢你的帮助

假设您有以下代码:

int *intPtr;   // creates a pointer
int count = 10; // initiates an intiger variable
intptr = &count; // ??
int count;
&
运算符为变量提供地址,在本例中为整数
计数
。然后将地址分配给
intptr
。我的问题是:为什么是
intptr=count不足。我知道,
count
是一个变量,
intptr
是一个指针,但变量不也是指内存中的某个位置吗


Hans

计数指变量的值。您不希望将count的值分配给intptr,而是希望分配count的地址。因此使用了&运算符


如果您执行intptr=count,在这种情况下,您将指向内存地址10,它肯定在系统内存中,而不是在应用程序内存中,您将崩溃。

变量是内存中的一个位置,而指针指的是内存中的一个位置(它所指的位置可以随时间而变化)


在您的示例中,如果您说
intptr=count
,那么您的意思仍然很明显(可以想象,编写一个编译器也可以猜到这一点)。但是,这会导致您可以使用的语法类型不一致。表达式的值称为左值,如果它引用可以赋值的对象,则称为左值,否则称为右值。如果编译器执行了您似乎建议的那种“猜测”,那么类型为
int
(即左值的表达式)的部分(但不是全部)表达式将自动转换为指针。在某些情况下,这可能会导致非常混乱的错误消息。

您仍然可以执行intptr=count,但这不会达到您所困惑的目的

您可能希望将指针指向内存中的地址,如果上帝保佑,count中的值是有效的地址位置,那么您可能也不会出现分段错误


当然,每个变量都指向内存中的某个位置,但这并不意味着将两种不同的变量等同起来,就会产生一种基于上述事实可以假设的行为。对于int变量和指针INT.< /P>< P>,在C或ObjuleC或C++编程中使用的一些函数中,有一个定义明确的定义,必须将“引用”作为一个参数传递给值(换句话说,指针),而不是变量。 以这段代码为例:

int *intPtr;   // creates a pointer
int count = 10; // initiates an intiger variable
intptr = &count; // ??
int count;
//是用于读入值的C方法/函数 //(数字或字符)从命令行

scanf("%i", &count); 
如果您尝试了相同的方法,如果没有“&”(的地址),您将得到编译时错误或运行时错误(取决于您在Win/Linux/OSX上工作的系统,因为每个编译器将执行一些不同的操作。[GCC、MingW等])

变量使用内存,并在程序完成之前一直保留在内存中,在此之前您无法恢复该内存


其中,当程序运行时,可以使用dealoc方法从内存中释放“指针”,并且在应用程序执行过程中释放内存。

理解指针实际上具有不同的数据类型很重要

int
变量将保存整数值

指针
变量将保存内存地址

因此,将int变量分配给指针变量是不正确的(正如您所建议的
intptr=count;

我相信使用
typedef
可以帮助您更好地理解差异

下面是一个小例子:

#include <stdio.h>

typedef int* int_pointer;

int main() {

    int n; // integer
    int_pointer p; // pointer

    n = 5;

    p = &n; // p's value is now n's address

    *p = *p + 1; // add 1 to the value stored at the location that p points to
                 // and put that value back in the same location

    printf("n = %d\n", n);
    printf("*p = %d\n", *p);

    return 0;
}

谢谢你的回答。我现在明白了区别。汉斯