标签: pointers

在Java中通过引用传递和在C中传递指针有什么区别?

我已经学习Java几个月了,现在我开始学习C.

我有点困惑,我的印象是通过引用传递一个对象并传递指向该对象的指针是同样的事情:我认为不同的是,在Java中所有对象的传递都是自动完成的指针,如C必须在这里和那里洒上小小的星号和&符号.最近,在谈话中,我确信存在差异!

传递引用和传递指针有什么区别?

c java pointers pass-by-reference

15
推荐指数
2
解决办法
4096
查看次数

将内存分配给双指针?

我无法理解如何为双指针分配内存.我想读取一个字符串数组并存储它.

    char **ptr;
    fp = fopen("file.txt","r");
    ptr = (char**)malloc(sizeof(char*)*50);
    for(int i=0; i<20; i++)
    {
       ptr[i] = (char*)malloc(sizeof(char)*50);
       fgets(ptr[i],50,fp);
    }
Run Code Online (Sandbox Code Playgroud)

而不是这个我只是分配一个大的内存块并存储字符串

  char **ptr;
  ptr = (char**)malloc(sizeof(char)*50*50);
Run Code Online (Sandbox Code Playgroud)

那会错吗?如果是这样,为什么呢?

c string malloc pointers double-pointer

15
推荐指数
3
解决办法
6万
查看次数

什么是int*p的问题;*P = 23;

昨天在我的采访中我被问到这个问题.(当时我被这么多突然的问题压得很厉害).

int *p;
*p=23;
printf("%d",*p);
Run Code Online (Sandbox Code Playgroud)

这段代码有问题吗?

我向他解释说你正在尝试为没有分配内存的指针赋值.

但他的反应方式,就像我错了.虽然我得到了这份工作,但在那之后他说Mohit再次考虑这个问题.我不知道他想说什么.请让我知道我的答案有什么问题吗?

编辑 我在表格上添加了代码; -

int *p;
p=malloc(sizeof(int));
*p=23;
printf("%d",*p);      
Run Code Online (Sandbox Code Playgroud)

这一定是完美的代码...我是对的..

EDIT2

int *p;
*p=23;
 OR
int *p=23;
Run Code Online (Sandbox Code Playgroud)

我认为两者都有问题.因为有些正在讲述帖子的标题.

c pointers

15
推荐指数
3
解决办法
3071
查看次数

C++在引用,对象和指针之间的区别

这是来自OOP高级课程考试的问题,用C++教授(在TAU大学,本学期):

问:C++指针和引用有什么区别?

A.  A reference is the entire object while a pointer is only the address of it.
B.  The same meaning, and difference is only in syntax and usage.
C.  The syntax used to access the object.
D.  Pointers are simple address to the object while a reference uses the virtual table.

哪个是正确的答案?

课程老师声称A是正确的,并且对象的引用实际上是对象本身.那是对的吗?我意识到访问引用等同于访问对象本身,但是,在破坏引用时,我们不会破坏对象本身.引用是对象的替代名称,但是说reference == object true?

顺便说一句,讲师给了一个faq的以下链接作为对他的主张的支持,引用:

"重要提示:尽管引用通常是使用底层汇编语言中的地址实现的,但请不要将引用视为指向对象的滑稽指针.引用是对象.它不是指向对象的指针,也不是对象的副本.这是对象."

但是,我认为这是不正确的.

c++ oop pointers reference

15
推荐指数
3
解决办法
8456
查看次数

将一个int指针转换为char ptr,反之亦然

问题很简单.据我了解,GCC坚持认为字符将是字节对齐的,并且在32位环境中对齐4字节对齐.我也知道C99标准6.3.2.3,它表示在未对齐的指针类型之间进行转换会导致未定义的操作.C的其他标准对此有何评论?这里也有许多经验丰富的编码员 - 对此有任何看法将不胜感激.

int *iptr1, *iptr2;
char *cptr1, *cptr2;

iptr1 = (int *) cptr1;
cptr2 = (char *) iptr2;
Run Code Online (Sandbox Code Playgroud)

c types pointers casting c89

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

在C++中混合函数定义中的指针和引用

我有一个函数有两个类的实例作为参数:

void cookPasta(const Tomato& tomato, const Meat* meat)
{
    if (meat != nullptr)
        cookPastaWithMeat(tomato, *meat);
    else
        cookPastaWithoutMeat(tomato);
}
Run Code Online (Sandbox Code Playgroud)

正如函数所示,Tomato总是需要一个实例,而是Meat可选的,nullptr而是可以传递一个实例.我这样做是为了允许cookPasta函数被调用,即使用户从未声明过Meat该类的实例.

在函数签名中混合引用和指针是不好的做法吗?

c++ oop pointers reference

15
推荐指数
2
解决办法
1499
查看次数

释放后重新分配指针变量

这合法吗?ptr它可以在被释放后分配给它吗?

int * ptr = (int*) malloc(sizeof(int));
free(ptr);
ptr = (int *) malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)

c free pointers dynamic-memory-allocation

15
推荐指数
5
解决办法
2881
查看次数

关于在 C++ 中初始化指针

我一直在阅读 C++ Primer 第 5 版。它提到

将 int 变量分配给指针是非法的,即使该变量的值恰好为 0。

我试了一下,结果如下:

int *u = 0; // success

int *w = 123; // fail 
/* compile error:
ptr_test.cc:9:12: error: invalid conversion from 'int' to 'int*' [-fpermissive]
    int *w = 123;
*/


int zero = 0;
int *v = zero; // fail
/* compile error
ptr_test.cc:9:12: error: invalid conversion from 'int' to 'int*' [-fpermissive]
    int *w = zero;
*/
Run Code Online (Sandbox Code Playgroud)

有人可以帮我解释一下指针初始化的确切规则吗?为什么将 int 指针分配给 0 可以,但 123 不行,尽管它们都是整数?为什么 123 会导致转换为“*int”,而 0 不会?

顺便说一句,我使用的是 g++ …

c++ pointers

15
推荐指数
2
解决办法
1188
查看次数

*(*int)(nil) = 0 在 golang 中是什么意思?

我注意到*(*int)(nil) = 0函数中有一行throw

//go:nosplit
func throw(s string) {
    // Everything throw does should be recursively nosplit so it
    // can be called even when it's unsafe to grow the stack.
    systemstack(func() {
        print("fatal error: ", s, "\n")
    })
    gp := getg()
    if gp.m.throwing == 0 {
        gp.m.throwing = 1
    }
    fatalthrow()
    *(*int)(nil) = 0 // not reached
}
Run Code Online (Sandbox Code Playgroud)

是什么*(*int)(nil) = 0意思?既然这条线*(*int)(nil) = 0无法到达,为什么它在这里?有什么特殊用法吗?

pointers go

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

gcc 奇怪的 -O0 代码生成。简单的 malloc。指向多维数组的指针

非常简单的代码:

void *allocateMemory5DArray(size_t x, size_t y, size_t z, size_t q, size_t r)
{
    int (*array)[x][y][z][q][r];

    array = malloc(sizeof(*array));
    return array;
}
Run Code Online (Sandbox Code Playgroud)

-O0gcc需要 296 字节的堆栈,生成的代码长度 > 180 行。任何人都可以解释其背后的原理吗?

其他编译器(除了 clang)也会生成奇怪的代码,但不像gcc:)

https://godbolt.org/z/1zx4YE

c gcc pointers

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