在许多C++ IDE和编译器中,当它为您生成主函数时,它看起来像这样:
int main(int argc, char *argv[])
Run Code Online (Sandbox Code Playgroud)
当我在没有IDE的情况下编写C++代码时,只需使用命令行编译器,我输入:
int main()
Run Code Online (Sandbox Code Playgroud)
没有任何参数.这意味着什么,对我的计划至关重要?
下面的两个代码示例都在链接列表的顶部添加了一个节点.但是,第一个代码示例使用双指针,而第二个代码示例使用单个指针
代码示例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的新手,具有良好的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)
所以:
**)?我正在使用二进制搜索树.
所以,这是用于表示节点的结构:
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)
在上面的方法中为什么我们需要双指针.我们可以使用单个指针!
我们使用双指针避免重复吗?
当GCC允许我这样做时,我感到很困惑:
int t[10][10][10][10][10];
Run Code Online (Sandbox Code Playgroud)
我意识到这int i[N][N]是一个NxN矩阵,第一个N表示行,第二个表示列.而且,第三N在int i[N][N][N]装置深度,给我们一个3D维阵列.
我不明白什么是int i[N][N][N][N]超越意味着什么.
第四个维度是时间,但这不适用于此.
那么,这是否意味着当我到达第三个时,我可以让逻辑消失?
我是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.这是整数指针还是值?它会指向什么?它包含什么/存储?这个变量有什么用?我怎么能理解这个表达方式?
我正在尝试以免费的双指针来理解代码片段
我想了解以下内容之间的区别。两个片段都来自上述网址
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,在解决下面的 1 个练习时遇到了问题。
编写一个程序,为一个指针动态分配 10 个字节的内存,提供的函数模板如下: bool allocate10Bytes(uint8_t *outPtr);
我尝试了以下代码,但主函数中的指针仍未分配。
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)
请帮我。非常感谢!
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语言的新手,我很困惑.
我是使用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, ®ion, 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()在这里被称为?之所以如此重要,是因为对于搜索中键入的每个字符,此代码将被调用数千次。