对于C或C++中的许多新的,甚至是老的大学生来说,为什么指针会成为混乱的主要因素?是否有任何工具或思维过程可以帮助您理解指针在变量,函数和更高级别的工作方式?
有什么好的做法可以让人达到"啊哈,我明白了"的水平,而不会让他们陷入整体概念的困境?基本上,钻取方案.
我知道这是一个非常基本的问题,但是我在用高级语言编写一些项目之后开始使用一些基本的C++编程.
基本上我有三个问题:
我不知道,为什么在NSError之前,如下所示,我们是否应该:&error而不是error?
例如
NSArray *result = [managedObjectContext executeFetchRequest:fetchRequest error:&error];
Run Code Online (Sandbox Code Playgroud)
希望你能解释一下,这也总是这样或者只是在某些情况下需要这个吗?谢谢.
我目前正在阅读Accelerated C++,我意识到我并不真正了解函数签名的工作原理.
int* ptr=#
Run Code Online (Sandbox Code Playgroud)
意味着ptr现在将地址保存为num,但这意味着什么?
void DoSomething(string& str)
Run Code Online (Sandbox Code Playgroud)
从我的理解,这是一个变量的引用传递(这意味着传递地址),但当我这样做
void DoSomething(string& str)
{
string copy=str;
}
Run Code Online (Sandbox Code Playgroud)
它创造的是str的副本.我认为它会做的是引发错误,因为我正在尝试分配一个指向变量的指针.
这里发生了什么?在函数调用中使用*和&是什么意思?
我是C的新手,我在学习指针方面遇到了一些问题.我试验了交换,这就是我能用它做的所有:)我知道每个变量在内存单元中都有自己的地址(这是我的讲师告诉我们的),每个变量的值都可以通过转到它的相关地址来获得获取存储在其中的值.我见过一些函数头文件,例如:
int doSomething(char **hihi);
Run Code Online (Sandbox Code Playgroud)
我的头很困惑.我知道指针也是一个变量,它只在地址信息中存储地址信息.我读到它们与数组密切相关
arr = &arr[0];
Run Code Online (Sandbox Code Playgroud)
这就是我对指针的了解,我想知道如何加深我对指针的看法.我搜索网,我找不到任何有用的备忘单覆盖指针.而且我也想知道它们为什么如此重要,有没有办法在不使用printf()打印地址(p)和值(\*p)的情况下理解实际发生了什么?
问题是:
EdX 上的基本 C 编程 MOOC 展示了如何在通过指针传递结构时访问函数内结构的成员。他们到底为什么在&旁边使用*???
他们展示: scanf("%lf", &(*studptr).aveGrade);
为什么不只studptr.aveGrade在 scanf 中使用?
(撇开单独的问题,“为什么要使用 scanf”)
(被要求提供完整的例子)
void readStudent(struct student *studptr) {
print("\nEnter a new student record: \n");
printf("First name: ");
scanf("%s", (*studptr).firstName);
printf("Last name: ");
scanf("%s", (*studptr).lastName);
printf("Birth year: ");
scanf("%d", &(*studptr).birthYear);
printf("Average grade: ");
scanf("%lf", &(*studptr).aveGrade);
}
Run Code Online (Sandbox Code Playgroud)