我想实现一个搜索表,这里是数据: 20130610 Diamond CoinMate 11.7246 15.7762 2897 20130412 Diamond Bithumb 0.209 0.2293 6128 20130610 OKCash Bithumb 0.183 0.2345 2096 20130412 Ethereum Chbtc 331.7282 401.486 136786 20170610 OKCash Tidex 0.0459 0.0519 66 … 和我的代码 typedef struct data{ int *date; string currency[100]; string exchange[100]; double *low; double *high; int *daily_cap; } Data; int main() { FILE *fp […]
我一直在研究Visual Basic .NET中的C风格指针。 我遇到过http://support.microsoft.com/kb/199824?wa=wsignin1.0,但我不知道这是正确的,也不知道如何应用它。 我已经使用c中的程序编写了一个简单的指针,我希望它将行转换为Visual Basic,并在必要时添加注释。 这是C: int main() { int *myNumber=3; //the * means it’s a pointer doubleIt(*myNumber); //we use the void, the * means it returns a value not address printf(“%d”,myNumber); //we print the variable return 0; //we terminate the function } void doubleIt(int input) { input*=2; //double the input }
我正在努力更好地理解c,我很难理解我在哪里使用*和&字符。 而且只是结构一般。 这是一些代码: void word_not(lc3_word_t *R, lc3_word_t A) { int *ptr; *ptr = &R; &ptr[0] = 1; printf(“this is R at spot 0: %d”, ptr[0]); } lc3_word_t是一个像这样定义的结构: struct lc3_word_t__ { BIT b15; BIT b14; BIT b13; BIT b12; BIT b11; BIT b10; BIT b9; BIT b8; BIT b7; BIT b6; BIT b5; BIT b4; BIT […]
重复: 用于多级指针解引用 我有一个关于C和指针的问题。 我知道什么时候需要一个指针,即使我需要一个指向指针的指针。 一个例子是如果我有一个链表,并且我想编写一个删除该列表元素的函数,为此我需要发送一个指向列表头部指针的指针。 指向指针指针的指针怎么样? 是否会出现需要的情况? 如果您有一些示例代码,那么我可以真正了解它。
我正在学习大学课程中的C和指针,我认为除了多维数组和指针之间的相似性之外,我对这个概念有很好的把握。 我认为,因为所有数组(甚至多维数组)都存储在连续内存中,你可以安全地将它转换为int* (假设给定的数组是一个int[] 。)但是,我的教授说明星中的星数。定义取决于数组中的维数。 因此, int[]将成为int* , int[][]将成为int**等。 所以我写了一个小程序来测试这个: void foo(int** ptr) { } void bar(int* ptr) { } int main() { int arr[3][4]; foo(arr); bar(arr); } 令我惊讶的是,编译器在两个函数调用上发出警告。 main.c:22:9: warning: incompatible pointer types passing ‘int [3][4]’ to parameter of type ‘int **’ [-Wincompatible-pointer-types] foo(arr); ^~~ main.c:8:16: note: passing argument to parameter ‘ptr’ here void foo(int** […]
我想在函数中更改变量的值。 我的代码是这样的: void change(char *buf){ char str = “xxxxxxx”; *buf = &str; } int main(){ char *xxx = NULL; change(xxx); } 当我用valgrind调试时,它说: ==3709== Invalid write of size 1 ==3709== at 0x80483CA: change (test.c:5) ==3709== by 0x80483E5: main (test.c:10) ==3709== Address 0x0 is not stack’d, malloc’d or (recently) free’d ==3709== ==3709== ==3709== Process terminating with default […]
我有关于指向数组的指针语法的问题。 我们知道数组本身就是指针(我们的教授说的是什么)所以为什么当我们用另一个指针指向它们时(它们是指向指针的指针)我们使用这种语法: int array[10]; int *pointer = array; 而不是这种语法: int array[10]; int **pointer = &array; 虽然我知道这是正确的使用malloc但为什么不以正常的方式,它是一个编译器或语法的东西或我错在其他地方?
下面是我在C中的简单链接列表。我的问题是“headRef =&newNode;” 这会导致分段错误。 然后我尝试了“* headRef = newNode;” 这解决了seg故障问题。 虽然这两行代码在我看来以同样的方式工作,但为什么会导致seg错误而另一行不会? 提前致谢。 struct node{ int data; struct node* next; }; void Push(struct node** headRef, int data){ struct node* newNode = malloc(sizeof(struct node)); if(!newNode) return; newNode->data = data; newNode->next = *headRef; headRef = &newNode; return; }
我尝试了一些代码来检查数组和指针的行为。 其内容如下。 #include main(){ int s[]={1,2}; int *b=s; printf(“%d, %d, %d\n”, s, &s, *s); printf(“%d, %d, %d\n”, b ,&b, *b); } 最初我认为指针和数组是相同的但是… 令我惊讶的是,’s’和’&s’的价值与’b’不同。 这是否意味着一个数组变量“指向自己?” 我现在也对实际上变量“名称”感到困惑? 如何与内存中的位置进行绑定? 我只是无法想象那里发生的事情! 内存(RAM)中的所有信息都是在运行时存储的?
我写了一个函数f()来返回指向main函数的本地指针。 我知道f()函数的内存将在执行后释放。 但是f()函数可以返回指向a [2]数组的指针。 我认为应该发布[2],但它仍然存在。 所以我想知道我可以编写一个函数,它可以返回本地指针,本地指针指向函数中的局部变量吗? 如果它可以返回,为什么在f()函数结束后不会释放[2]的数组? #include int* f() { int a[2] = {1, 2}; int* p = a; printf(“%p\n”, p); return p; } int main(void) { int* p = f(); printf(“%p\n”, p); return 0; }