相关疑难解决方法(0)

如何&a是一个指针,如果它生成一个?的地址?

我是编程新手,目前我正在学习C中的指针.

  1. 我知道指针是包含或保存另一个变量的地址的变量.今天当我用K&R更多地了解它时,我感到很困惑,在第80页的给定函数交换(&a,&b)中,"&a是指向a的指针".如何&a是指针?它不是变量,而是变量的地址.我对吗?
  2. 我知道参数可以通过两种方式传递给函数:按值调用和按引用调用.参数的调用者值在第一个中没有改变,但可以在第二个中改变.

我的问题是我已经读过,如果我们想要改变变量的值,我们必须将指针传递给它(即我们想要修改的值的位置).这是什么意思?我的意思是,我们必须传递指向函数的指针吗?声明的含义是什么,"我们必须将指针传递给我们想要修改的位置".

c pointers memory-address

4
推荐指数
1
解决办法
453
查看次数

用什么来描述C中的指针会有什么好的真实世界比喻?

我发现通过现实世界的比较隐喻我学得最好.例如,在java中,帮助我理解Accessors和Mutators概念的一种方法是通过中间人的概念来思考它(私有变量不喜欢直接处理他们的客户,他们更喜欢有中间人(访问者和变异者)处理它们)

C中指针的概念对我来说仍然有点棘手.用什么来描述它们是如何工作的好比喻是什么?

c pointers

3
推荐指数
1
解决办法
1839
查看次数

指针在c和c程序中

我正在学习指针,我遇到了这个程序:

#include <stdio.h>

void swap(int *,int *);

int main()
{
    int a=10;
    int b=20;
    swap(&a,&b);
    printf("the value is %d and %d",a,b);
    return 0;
}

void swap(int *a,int*b)
{
    int t;
    t=*a;
    *a=*b;
    *b=t;
    printf("%d and%d\n",*a,*b);
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我为什么这个主函数返回值反转?到目前为止我理解的是C中的函数调用不会影响main函数及其值.

我也想知道指针变量占用的空间有多少像整数一样占用了2个字节以及各种应用程序的使用和指针的优点......

c pointers

2
推荐指数
1
解决办法
226
查看次数

array [] vs pointer* - 为什么第一个代码在C中失败?

我正在使用Keil C51编译器来编程8051微控制器.由于某些原因,我的代码没有运行 - 我设法追踪错误,但我仍然难以理解它.为什么第一个代码与另一个代码相比是错误的?值得注意的是,编译器没有抛出任何错误,代码甚至没有在微控制器上启动.

错误的代码:

file1.h

extern STRUCT_TYPEDEF array_var[];
Run Code Online (Sandbox Code Playgroud)

file2.c中

// Global variable initialization
STRUCT_TYPEDEF array_var[] = some_struct.array2_var;
Run Code Online (Sandbox Code Playgroud)

将这些更改为:

file1.h

extern STRUCT_TYPEDEF *array_var;
Run Code Online (Sandbox Code Playgroud)

file2.c中

// Global variable initialization
STRUCT_TYPEDEF *array_var = &some_struct.array2_var[0];
Run Code Online (Sandbox Code Playgroud)

它开始工作了.

此外,这部分代码仅在类似"array_var [0] .property = ..."的函数中引用,但这些函数都没有从应用程序中调用过.

some_struct变量在另一个模块中声明.

它为什么会这样?[]和*之间有什么区别我不知道吗?

EDIT1: 据说指针和数组是不同的东西......但是,"[]"语法与"*"的区别是什么?我认为只要方括号为空(例如函数参数),编译器就会将其转换为指针.我还认为提供一个数组会导致给我第一个元素的地址.

现在,每个人都在说指针和数组是不同的 - 但我找不到任何关于它们究竟有什么不同的信息.当我将数组作为rvalue而不是指向其第一个元素的指针时,编译器如何看待它?

c arrays pointers keil c51

2
推荐指数
1
解决办法
982
查看次数

为什么在C中指针如此重要?

我了解指针的前提,但是我觉得它很烦人,我不明白为什么它被认为有用:

#include <stdio.h>
int main () {
   int *ptr, q;
   q = 50;
   ptr = &q;
   printf("%d", *ptr);
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

为什么这是一个基本概念?

c file include

2
推荐指数
1
解决办法
82
查看次数

为什么这个属性没有设置?

在我投射之后,我无法设置属性的值.我不确定这是否被称为拳击.

无论如何,新的变量正在设置,但原始的不是.我认为新变量只是对原始变量的引用.但是当我检查intellisence/debug观察器时,原始属性仍为null.

这是代码.

// NOTE: data is either a Foo || FooFoo || FooBar, at this point.
//       only Foo impliments ITagElement.
if (data is ITagElement)
{
    var tags = ((ITagElement)data).TagList;
    // At this point, tags == null and data.TagList == null.
    if (tags.IsNullOrEmpty())
    {
        tags = new List<Tag>();
    }

    tags.Add(new Tag
    {
        K = xmlReader.GetAttribute("k"),
         V = xmlReader.GetAttribute("v")
    });

    // At this point, Tags.Count == 1 and data.TagList == null :( :( :(
}
Run Code Online (Sandbox Code Playgroud)

请注意有关该值我行内注释 …

.net

1
推荐指数
1
解决办法
195
查看次数

非常基本的C问题

如果我错了,有人可以检查我的理解并纠正我吗?

int p = 5; //create an int holding 5
int *ptr; //create a pointer that can point to an int
*ptr = &p; // not sure - does this mean that my pointer now points to memory address   five, or that the memory address my pointer points at contains 5?
Run Code Online (Sandbox Code Playgroud)

对不起基本的问题 - 我很快就有一个需要使用指针的assignmnet,我真的想在它设置之前破解基础知识.

c pointers

1
推荐指数
1
解决办法
267
查看次数

了解指针?

正如标题所示,我无法准确理解指针是什么以及为什么使用它们.我已经搜索了一下但仍然不太懂.我主要在Objective-C工作,但从我读过的内容来看,这更像是一个C主题(所以我添加了两个标签).

根据我的理解,前面带星号的变量指向内存中的地址?我不太明白为什么你使用指向值的指针而不是仅仅使用值本身.

例如:

NSString *stringVar = @"This is a test.";
Run Code Online (Sandbox Code Playgroud)

在这个字符串上调用方法时,为什么它是一个指针而不是直接使用字符串?为什么不使用指向整数和其他基本数据类型的指针?

有点偏离主题,但我是否正确标记了这个?在我编写它时,我认为它更像是一个编程概念,而不是特定于语言的东西,但它确实专注于Objective-C,所以我用objective-c和c标记它.

c objective-c

1
推荐指数
2
解决办法
2390
查看次数

在 C 中释放指向 malloc 内存的指针的副本

似乎在其他地方找不到我的问题的答案。

考虑代码:

int *ptr = malloc (sizeof (*ptr));

int *dummyPtr = ptr;

free (dummyPtr);

printf ("ptr: %p, dummy: %p\n", ptr, dummyPtr);
Run Code Online (Sandbox Code Playgroud)

据我了解,free()接受一个指针并使其指向NULLaka (nil)。即,指针被取消引用并且指向任何地方。这意味着指针指向的内存被有效擦除。

这个问题分为两个部分:

  1. 如果我运行上面的代码,dummyPtr似乎仍然指向内存中的地址而不是(nil). 为什么?
  2. 会发生什么ptr?它仍然指向该内存块还是也被取消引用?

我已经多次运行此代码和某些变体,但结果相互矛盾。有时只有副本受到影响,有时两者都受到影响。有时指向的值甚至设置为零!

坦白说,我不知道发生了什么事。(我正在运行 Debian,如果这有什么区别的话。)

c malloc free pointers copy

1
推荐指数
1
解决办法
2233
查看次数

这是如何运作的?指向指针赋值的指针

#include <iostream>
using namespace std;
int main() {
    int *p1;
    p1 = new int;
    int *p2;
    p2 = new int;
    p2 = p1;    // what happens here?
    *p1=5;
    cout << "pointer 2 is " << *p2 << endl << *p1 << endl;  // both give out 5
    delete p1;  // what happens to p2 ?
    cout << "pointer 2 is " << *p2 << endl;
    delete p2;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

当我删除指针对象 p1 时会发生什么?什么是指针 p2 现在引用?有人能解释一下吗?谢谢您的帮助

c++ dynamic-memory-allocation

1
推荐指数
1
解决办法
67
查看次数