我有一个链表,它接受一个输入字符串,并将每个字符串存储在列表的一个节点中。我希望打印保存每个字符串的节点的十六进制地址。
我怎么能这么做?我尝试打印保存的单词的十六进制地址,但我还不知道它是否仍然是节点的相同地址,这是应该打印每个节点的函数:
// print the list
void printList(ListNodePtr currentPtr)
{
// if list is empty
if (isEmpty(currentPtr)) {
puts("List is empty.\n");
}
else {
pu
我有个小问题:
struct point {int x ; int y;};
int main(){
struct point p = {10,20};
struct point *pp = &p;
(∗ pp).x = 10; // what is happening here
int y= (∗ pp).y; return 0} // what is happening here
更普遍的是,为什么()是必需的?
(这是一篇教程中的文章,但他们在那里没有答案。)
我是一个C编程新手,对以下几行代码有一个疑问。这发生在创建结构电影的链表的上下文中:
struct film {
char title[TSIZE];
int rating;
struct film * next;
}
int main(void)
{
struct film * head = NULL;
struct film * prev, *current;
char input[TSIZE];
// some code ommitted
strcopy(current->title, input);
在C中,以下内容是合法的:
int a[] = {27,2};
int *b;
int c;
b = a;
c = *b; /* c == 27 */
关键是a只是数组的地址,所以我可以把它赋给一个指针。为什么struct不是这样,我假设struct变量的值就是地址,因此我应该能够将它赋给一个指针,如下所示:
struct foo bar;
struct foo *doo;
bar.x = 0;
doo = bar; //is this legal?
doo.x = 0; //why can't I use the dot?
换句话说,如果一个struct变量的值只是第一个组件的地址
关于这一行,我有一个问题:cout << *ptr[i] << endl;。如果我像&ptr[i]一样更改,那么结果就是它的地址0x7ffef7402a40。
我的问题是:我要做什么才能从这个cout << &ptr[i] << endl;中获得值,而不是地址呢?
const int MAX = 3;
int main () {
int var[MAX] = {10, 100, 500};
int *ptr[MAX];
for (int i = 0; i < MAX; i++) {
ptr[i]
我想,当您尝试获取数组的地址时,它会返回它所持有的第一个元素的地址。
int *j;
int a[5]={1,5,4,7,8};
现在,j=&a[0];工作得非常好。
甚至j=a也执行相同的功能。
但是,当我执行j=&a时,它会抛出一个错误:cannot convertint (*)5‘to int*' in assignment
为什么会发生这种情况?&a应该是数组a的第一个元素,所以它应该给出& a,但是它会抛出一个错误。谁能解释一下原因吗?
你好,我的C代码有问题。我试图让用户将一个字符串分配给先前定义的char *srchstr;和char *repstr;。通过查看其他类似的线程,我尝试以以下方式实现它,但仍然失败:
char *srchstr;
srchstr = malloc(256);
char *repstr;
repstr = malloc(256);
printf("what are you searching for?:");
scanf("%255s",&srchstr);
fflush(stdin);
printf("\n what do you want to
假设我们有
int foo[4] = {1, 2, 3, 4};
然后,foo将是指向数组的第一个元素的指针。我们可以:
printf("%p", foo); // OUTPUT is some address 0xffffcc00
如果我们这样做了:
printf("%p", &foo); // OUTPUT is the same address 0xffffcc00
在线查看时,我看到&<array-name>的这个特定语法接受整个数组的地址。这解释了上面两个相同的值,因为起始元素的地址与整个数组的地址相同。
但总的来说,我的理
代码工作正常。在术语esomething‘之后的几个地方是。使用操作符。因为e是一个指针,它保存一个元素的地址,所以为什么不使用'->‘操作符。是因为esomething会将整个结构保存为该index=something的值,而不是元素的地址?
#include <stdio.h>
#include <stdlib.h>
struct element{
int i;
int j;
int x; //x represents value of A[i][j]
};
struct sparse{
int m;
int n;
int
对于何时将*和&放在函数参数和函数调用的符号上,特别是在指针上,我感到困惑。我也想在初始化中进行动态分配,但是在集合中允许吗?据我所知,我的集合只是一个整数数组。我试图创建一个程序,有2套。这些集合将存储值并可以显示。
这是我的新手代码:
#include<stdio.h>
#include<conio.h>
#define MAX 5
typedef int SET;
void initializeSet(SET *A, SET *B);
void insertElem(SET *C);
void displayElem(SET *C);
int mai
我一直在通过查看其他代码来练习,但我不能理解以下概念:
int *ptr2int = &varInt;
int **ptr2ptr = &ptr2int;
int ***ptr2ptr2 = &ptr2ptr;
为什么第一个指针声明使用一个*,第二个使用两个,第三个使用三个?指针到底是如何工作的,它在做什么?
有人能向我解释一下为什么这段代码有效吗?我觉得编译器不应该允许我做我所做的事情(移动一个int指针指向一个const ),或者至少我会期望编译器警告或分段错误。改变常数值的想法似乎是错误的。
代码:
#include <iostream>
using namespace std;
struct test_struct {
int i;
const int j;
};
int main() {
cout << "Create a struct with int i = 100 and const int j = 101." &