相关疑难解决方法(0)

为什么要使用双指针?或者为什么要使用指针指针?

什么应该在C中使用双指针?任何人都可以用一个例子来解释

我所知道的是双指针是指向指针的指针.为什么我需要一个指针指针?

c pointers

247
推荐指数
11
解决办法
20万
查看次数

使用指针从单链表中删除项目

在最近的Slashdot访谈中, Linus Torvalds给出了一个例子,说明一些人如何使用指针,表明他们并不真正理解如何正确使用它们.

不幸的是,由于我是他所谈论的人之一,我也不理解他的例子:

我见过太多人通过跟踪"prev"条目删除单链表项,然后删除条目,做类似的事情

if (prev)
    prev->next = entry->next;
else
    list_head = entry->next;
Run Code Online (Sandbox Code Playgroud)

每当我看到这样的代码时,我就会去"这个人不理解指针".而且很遗憾很常见.理解指针的人只使用"指向条目指针的指针",并使用list_head的地址初始化它.然后当他们遍历列表时,他们可以在不使用任何条件的情况下删除条目,只需执行即可

*pp = entry->next
Run Code Online (Sandbox Code Playgroud)

有人可以提供更多解释为什么这种方法更好,以及它如何在没有条件声明的情况下工作?

c pointers linked-list

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

**用C语言做什么

我是C的新手,具有良好的java背景,我正在尝试理解指针和数组.

我知道下标operator[]是数组定义的一部分,所以:

int numbers[] = {1,3,4,5};
Run Code Online (Sandbox Code Playgroud)

会创建一个整数数组,它将在内存中表示为16个字节,4个4个字节:

numbers[0] = 1, address 0061FF1C
numbers[1] = 3, address 0061FF20
numbers[2] = 4, address 0061FF24
numbers[3] = 5, address 0061FF28
Run Code Online (Sandbox Code Playgroud)

但是,当涉及指针时,我的知识开始崩溃,所以如果我要创建一个指向数组数字的指针,我将执行以下操作:

int *pNumbers = &numbers[0];
Run Code Online (Sandbox Code Playgroud)

看起来像这样:

指向数字的指针

而且我猜它的大小是4字节?

然而,**我读作"指针指针"对我来说没有意义,为什么有人想要指针指针,当然如果a-> b-> c然后a-> c就足够了?我知道我错过了一些东西,它必须与数组有关,argv可以是类型char[ ]char **下面看到的:

int main(int argc, char **argv){}
Run Code Online (Sandbox Code Playgroud)

所以:

  • 这是什么(**)?
  • 它有什么用途?
  • 它在记忆中如何表现?

c memory arrays pointers

37
推荐指数
6
解决办法
4万
查看次数

在C中交换指针(char,int)

当我在C中交换指针时,我一直在努力理解不同的行为.如果我想交换两个int指针,那么我可以做

void intSwap (int *pa, int *pb){
    int temp = *pa;
    *pa = *pb;
    *pb = temp;
}
Run Code Online (Sandbox Code Playgroud)

但是,如果我想交换两个char指针,我需要做类似的事情

void charSwap(char** a, char** b){
    char *temp = *a;
    *a = *b;
    *b = temp;
}
Run Code Online (Sandbox Code Playgroud)

因为如果我这样做

void charSwap(char* a, char* b){
    char temp = *a;
    *a = *b;
    *b = temp;
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨表达式*a =*b,因为它无法更改值.如果我想交换两个strings(即char* s1= "Hello"; char* s2="Bye";)如何做到这一点?

你能给我一点帮助吗?我想真正了解它是如何工作的,所以在获得正确答案之前我不需要经历反复试验.我希望它对许多其他人有用.

c pointers

32
推荐指数
2
解决办法
9万
查看次数

C双指针

struct counter{
    long long counter;
}

struct instruction{
    struct counter *counter
    int repetitions;
    void (*work_fn)(long long *);
};

int ncounter; //number of counters
struct counter *counter; //counter array

int nthreads; //number of threads
int *ninstructions; //number of instructions

struct instruction **instructions; 
Run Code Online (Sandbox Code Playgroud)

这实际上是如何工作的?我遇到**指针问题

c

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

Go: **类型指针

In tutorial is written:

The type *T is a pointer to a T value. The & operator generates a pointer to its operand.

I am just playing around with pointers in Go and have following:

example := 42

p:=&example
fmt.Println(reflect.TypeOf(&p)) // **int
fmt.Println(reflect.TypeOf(*p)) // int
Run Code Online (Sandbox Code Playgroud)

So if I got it correctly, &p is a pointer to a pointer to an int value.

指针存储方案

What is use of **Type in the Go language?

pointers go

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

标签 统计

c ×5

pointers ×5

arrays ×1

go ×1

linked-list ×1

memory ×1