相关疑难解决方法(0)

int argc,char*argv []是什么意思?

在许多C++ IDE和编译器中,当它为您生成主函数时,它看起来像这样:

int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)

当我在没有IDE的情况下编写C++代码时,只需使用命令行编译器,我输入:

int main()
Run Code Online (Sandbox Code Playgroud)

没有任何参数.这意味着什么,对我的计划至关重要?

c++ parameters argv command-line-arguments argc

476
推荐指数
8
解决办法
81万
查看次数

在链表中添加节点时使用双指针的原因是什么?

下面的两个代码示例都在链接列表的顶部添加了一个节点.但是,第一个代码示例使用双指针,而第二个代码示例使用单个指针

代码示例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);
Run Code Online (Sandbox Code Playgroud)

代码示例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)
Run Code Online (Sandbox Code Playgroud)

两种策略都有效.但是,许多使用链表的程序使用双指针来添加新节点.我知道双指针是什么.但是如果单个指针足以添加新节点,为什么很多实现都依赖于双指针?

有没有一个指针不起作用的情况所以我们需要去一个双指针?

c pointers linked-list

44
推荐指数
4
解决办法
5万
查看次数

**用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万
查看次数

使用双指针而不是单指针

我正在使用二进制搜索树.

所以,这是用于表示节点的结构:

typedef struct TreeNode
{
int num;
struct TreeNode *left,*right;
}TREENODE;
Run Code Online (Sandbox Code Playgroud)

要在树中插入节点,我有以下方法签名

void InsertNode(TREENODE **root,int data);
Run Code Online (Sandbox Code Playgroud)

在上面的方法中为什么我们需要双指针.我们可以使用单个指针!

我们使用双指针避免重复吗?

c pointers data-structures

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

n维c ++数组.怎么可能?

当GCC允许我这样做时,我感到很困惑:

int t[10][10][10][10][10];
Run Code Online (Sandbox Code Playgroud)

我意识到这int i[N][N]是一个NxN矩阵,第一个N表示行,第二个表示列.而且,第三Nint i[N][N][N]装置深度,给我们一个3D维阵列.

我不明白什么是int i[N][N][N][N]超越意味着什么.

第四个维度是时间,但这不适用于此.

那么,这是否意味着当我到达第三个时,我可以让逻辑消失?

c++ matrix multidimensional-array

4
推荐指数
3
解决办法
2021
查看次数

"int**k"是什么意思?

我是C编程语言的初学者.我在书上看到了一个代码:

#include<stdio.h>
int main(){
    int * * k, *a, b=100;

    a = &b;
    k = &a;
    printf("%d\n",* * k);
}
Run Code Online (Sandbox Code Playgroud)

我不知道的意思int * *k.这是整数指针还是值?它会指向什么?它包含什么/存储?这个变量有什么用?我怎么能理解这个表达方式?

c pointers pointer-to-pointer

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

如何在C中使用指向指针的指针分配内存

我正在尝试以免费的双指针来理解代码片段

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

我想了解以下内容之间的区别。两个片段都来自上述网址

int** pt; 

pt = (int*) malloc(sizeof(int)*10);
Run Code Online (Sandbox Code Playgroud)

*pt = (int*) malloc(sizeof(int)*10);
Run Code Online (Sandbox Code Playgroud)

你能详细说明一些例子和绘图吗

c malloc pointers

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

如何在主函数中分配指针?

我刚开始学习编程语言 C,在解决下面的 1 个练习时遇到了问题。

编写一个程序,为一个指针动态分配 10 个字节的内存,提供的函数模板如下: bool allocate10Bytes(uint8_t *outPtr);

  • outPtr:输出指针
  • return: true: 如果分配成功。false:如果分配失败。

我尝试了以下代码,但主函数中的指针仍未分配。

bool allocate10Bytes(uint8_t* outPtr)
{
    outPtr = (uint8_t*)malloc(10 * sizeof(uint8_t));

    if (outPtr == NULL) {
        return false;
    }

    return true;
}

int main(void)
{
    uint8_t* p = NULL;

    bool success = allocate10Bytes(p);
    
    if (success) free(p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请帮我。非常感谢!

c

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

二维char数组初始化C

根据这个指针的响应指针

char[] = char *p
char[][] = char **p
Run Code Online (Sandbox Code Playgroud)

但是,当我使用接下来的两个表单初始化一个字符串数组时

char **p = {"Hello", "World"};
char p[][] = {"Hello", "World"};
Run Code Online (Sandbox Code Playgroud)

编译器向我显示了一些错误.

[错误]数组类型具有不完整的元素类型

但随着

char *matriz[] = {"Hello", "World"};
Run Code Online (Sandbox Code Playgroud)

没有警告.我是C语言的新手,我很困惑.

c arrays pointers

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

声明gchar后需要g_free吗?

我是使用GTK +和C编写小型应用程序的初学者。我正在GtkTreeView使用以下显示功能设置一个过滤器,主要是从此处复制的。

static gboolean filter_func (GtkTreeModel *model, GtkTreeIter *row, gpointer data) {
  // if search string is empty return TRUE

  gchar *titleId, *region, *name;
  gtk_tree_model_get (model, row, 0, &titleId, 1, &region, 2, &name, -1);

  // get search string
  if (strstr (titleId, "search text here") != NULL) {
    return TRUE;
  }

  g_free (titleId);
  g_free (region);
  g_free (name);

  return FALSE;
}
Run Code Online (Sandbox Code Playgroud)

我假定到目前为止这free()需要有malloc()和阅读https://developer.gnome.org/glib/stable/glib-Memory-Allocation.html告诉我:

重要的是要与g_malloc()(以及诸如的包装器g_new())进行匹配g_free()

因此,如果是这样,那么为什么g_free()在这里被称为?之所以如此重要,是因为对于搜索中键入的每个字符,此代码将被调用数千次。

c malloc free gtk3

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