带有迭代器的代码看起来非常像带指针的代码。 迭代器是一些模糊的types(例如std::vector<int>::iterator )。 我没有得到的是迭代器和指针是如何相互关联的 – 迭代器是一个包装指针的重载操作,以推进到相邻的元素还是别的东西?
以下代码在做什么? int g[] = {9,8}; int (*j) = g; 从我的理解中创build一个指向2个整数的指针。 但是为什么这个工作: int x = j[0]; 这不工作: int x = (*j)[0];
可能重复: 指针的大小可以根据指向的内容而有所不同吗? 是否有任何平台指向不同types的指针有不同的大小? c中指向float的指针的大小是否可以和指向int的指针不同? 经过尝试,我得到了各种指针相同的结果。 #include <stdio.h> #include <stdlib.h> int main() { printf("sizeof(int*): %i\n", sizeof(int*)); printf("sizeof(float*): %i\n", sizeof(float*)); printf("sizeof(void*): %i\n", sizeof(void*)); return 0; } 这里的输出(OSX 10.6 64位) sizeof(int*): 8 sizeof(float*): 8 sizeof(void*): 8 我能否假设不同types的指针具有相同的大小(当然是在一个拱门上)?
int* p = 0; int* q = &*p; 这是不确定的行为吗? 我浏览了一些相关的问题,但是这个具体方面没有显示出来。
所以我遇到了一些面试问题,我遇到了这个问题 这个问题的答案彻底让我困惑! 根据这个问题,似乎无效和空可以交替使用,我不相信这是正确的。 我认为无效是一个返回types,空值是一个值。 但是我只是一个代码新手,我不知道我是否正确。 因此,所有的专家在那里..如果你可以摆脱一些光,这将是非常有益的! 🙂 请expression您的意见,什么是空指针和空指针是什么。 不寻找无效之间的区别。 也请validation问题的答案,并告诉我,如果这是正确的…谢谢
可能重复: 什么是不透明的价值? 我可以知道C中不透明指针概念背后的用法和逻辑吗?
假设有一个指针,我们用NULL初始化它。 int* ptr = NULL; *ptr = 10; 现在,程序会崩溃,因为ptr没有指向任何地址,我们正在给它赋值,这是一个无效的访问。 所以,问题是,在操作系统内部发生了什么? 页面错误/分段错误是否发生? 内核甚至会在页面表中search? 或者之前发生了崩溃? 我知道我不会在任何程序中做这样的事情,但这只是为了知道在这种情况下在操作系统或编译器内部发生了什么。 这不是一个重复的问题。
考虑这个代码: public class Program { private static void Main(string[] args) { var person1 = new Person { Name = "Test" }; Console.WriteLine(person1.Name); Person person2 = person1; person2.Name = "Shahrooz"; Console.WriteLine(person1.Name); //Output: Shahrooz person2 = null; Console.WriteLine(person1.Name); //Output: Shahrooz } } public class Person { public string Name { get; set; } } 很明显,当将person1分配给person2并更改person2的Name属性时, person2的Name也将被更改。 person1和person2有相同的参考。 […]
下面的两个代码示例都在链表顶部添加一个节点。 但是,第一个代码示例使用双指针,而第二个代码示例使用单个指针 代码示例1: struct node* push(struct node **head, int data) { struct node* newnode = malloc(sizeof(struct node)); newnode->data = data; newnode->next = *head; return newnode; } push(&head,1); 代码示例2: struct node* push(struct node *head, int data) { struct node* newnode = malloc(sizeof(struct node)); newnode->data = data; newnode->next = head; return newnode; } push(head,1) 两种策略都有效。 但是,很多使用链表的程序使用双指针来添加新节点。 我知道双指针是什么。 […]
我正在阅读Rust书的有生之年的一章 ,并且我在这个例子中看到了一个命名/明确的生命周期: struct Foo<'a> { x: &'a i32, } fn main() { let x; // -+ x goes into scope // | { // | let y = &5; // —+ y goes into scope let f = Foo { x: y }; // —+ f goes into scope x = &f.x; // | | […]