标签: pointers

是否可以将C指针初始化为NULL?

我一直在写类似的东西

char *x=NULL;
Run Code Online (Sandbox Code Playgroud)

假设是

 char *x=2;
Run Code Online (Sandbox Code Playgroud)

会创建一个char指向地址2 的指针.

但是,在GNU C编程教程中,它表示int *my_int_ptr = 2;将整数值存储2my_int_ptr分配时的任何随机地址.

这似乎意味着我自己char *x=NULL正在将NULL一个cast 的值分配给char内存中的某个随机地址.

#include <stdlib.h>
#include <stdio.h>

int main()
{
    char *x=NULL;

    if (x==NULL)
        printf("is NULL\n");

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

事实上,印刷品

一片空白

当我编译并运行它时,我担心我依赖于未定义的行为,或者至少是指定不足的行为,我应该写

char *x;
x=NULL;
Run Code Online (Sandbox Code Playgroud)

代替.

c pointers initialization

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

int(*)(int*)= 5(或任何整数值)的含义

我无法弄清楚这一点:

int main() {
    int (*) (int *) = 5;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

上面的赋值用g ++ c ++ 11编译.我知道这int (*) (int *)是一个指向函数的指针,它接受一个(int *)as参数并返回一个int,但是我不明白你怎么能把它等同于5.起初我认为它是一个不断返回5的函数(来自我最近的学习) F#,可能,哈哈),然后我简单地想,函数指针指向内存位置5,但这显然不起作用,并且十六进制值也不行.

认为这可能是因为函数返回一个int,并且分配一个int是好的(不知何故),我也试过这个:

int * (*) (int *) = my_ptr
Run Code Online (Sandbox Code Playgroud)

where my_ptr是类型int *,与第二个函数指针的类型相同,如第一种类型为int的情况.这不编译.分配5或任何int值,而不是my_ptr,也不编译此函数指针.

那么作业是什么意思呢?

更新1

我们已经确认这是一个错误,如最佳答案所示.但是,仍然不知道您分配给函数指针的值实际发生了什么,或者赋值的情况.任何(好的)解释都将非常感谢!有关问题的详细说明,请参阅下面的编辑.

编辑1

我使用的是gcc版本4.8.2(在Ubuntu 4.8.2中)

编辑2

实际上,将它等同于我的编译器.甚至将它等同于std :: string变量,或者返回double的函数名,也可以.

编辑2.1

有趣的是,使它成为一个函数指针,指向任何返回不是指针的数据类型的函数,将让它进行编译,例如

std::string (*) () = 5.6;
Run Code Online (Sandbox Code Playgroud)

但是只要函数指针指向返回某个指针的函数,它就不会编译,例如with

some_data_type ** (*) () = any_value;
Run Code Online (Sandbox Code Playgroud)

c++ pointers function-pointers

87
推荐指数
3
解决办法
8909
查看次数

在指针声明中放置星号

我最近决定我必须最终学习C/C++,有一件事我不太了解指针,或者更确切地说,他们的定义.

这些例子怎么样:

  1. int* test;
  2. int *test;
  3. int * test;
  4. int* test,test2;
  5. int *test,test2;
  6. int * test,test2;

现在,根据我的理解,前三个案例都是相同的:测试不是一个int,而是一个指针.

第二组示例有点棘手.在case 4中,test和test2都是指向int的指针,而在case 5中,只有test是指针,而test2是"real"int.案例6怎么样?案例5相同?

c c++ pointers declaration

86
推荐指数
8
解决办法
3万
查看次数

在Go中有指针有什么意义?

我知道Go中的指针允许函数参数的变异,但如果它们只采用引用(使用适当的const或可变限定符),它就不会更简单.现在我们有指针和一些内置类型,如地图和通道隐式传递引用.

我是否遗漏了某些内容或指向Go只是一个不必要的并发症?

pointers go

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

"int*ptr = int()"值初始化如何不违法?

以下代码(取自此处):

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

在Visual C++中编译并对指针进行值初始化.

怎么可能?我的意思是int()产生一个类型的对象,int我不能指定int一个指针.

上面的代码如何不违法?

c++ pointers initialization built-in-types visual-c++

86
推荐指数
4
解决办法
3602
查看次数

函数指针有什么意义?

我很难看到函数指针的实用程序.我想它在某些情况下可能是有用的(毕竟它们存在),但我想不出使用函数指针更好或不可避免的情况.

你能举出一些好用函数指针的例子(在C或C++中)吗?

c c++ pointers function c++-faq

85
推荐指数
8
解决办法
1万
查看次数

std :: reference_wrapper和简单指针之间的区别?

为什么需要std::reference_wrapper?应该在哪里使用?它与简单的指针有什么不同?它的性能与简单的指针相比如何?

c++ pointers reference c++11 reference-wrapper

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

C#Reference和指针有什么区别?

我不太了解C#引用和指针之间的区别.他们都指向记忆中的一个地方不是吗?我能弄清楚的唯一区别是指针不是那么聪明,不能指向堆上的任何东西,免于垃圾收集,并且只能引用结构或基类型.

我问的一个原因是,有一种观点认为人们需要很好地理解指针(从C,我猜)是一个优秀的程序员.许多学习更高级语言的人都错过了这个,因此有这个弱点.

我只是不知道指针的复杂程度如何?它基本上只是对内存中某个地方的引用不是吗?它可以返回它的位置并直接与该位置的对象进行交互?

我错过了一个重点吗?

c# pointers reference

82
推荐指数
8
解决办法
4万
查看次数

"int*nums = {5,2,1,4}"会导致分段错误

int *nums = {5, 2, 1, 4};
printf("%d\n", nums[0]);
Run Code Online (Sandbox Code Playgroud)

导致段错误,而

int nums[] = {5, 2, 1, 4};
printf("%d\n", nums[0]);
Run Code Online (Sandbox Code Playgroud)

没有.现在:

int *nums = {5, 2, 1, 4};
printf("%d\n", nums);
Run Code Online (Sandbox Code Playgroud)

打印5.

基于此,我猜想数组初始化符号{}会盲目地将这些数据加载到左边的任何变量中.当它是int []时,数组将根据需要填充.当它是int*时,指针被填满5,并且存储指针之后的存储器位置被填充为2,1和4.因此nums [0]尝试deref 5,导致段错误.

如果我错了,请纠正我.如果我是正确的,请详细说明,因为我不明白为什么数组初始化程序按照它们的方式工作.

c arrays pointers

81
推荐指数
5
解决办法
4928
查看次数

P ::************在Boost assert.hpp文件中的含义是什么?

boost/mpl/assert.hpp中,我看到这样的事情:

template<class Pred>
struct eval_assert {
    typedef typename extract_assert_pred<Pred>::type P;
    typedef typename P::type p_type;
    typedef typename ::boost::mpl::if_c<p_type::value,
        AUX778076_ASSERT_ARG(assert<false>),
        failed ************ P::************
    >::type type;
};
Run Code Online (Sandbox Code Playgroud)

如果第一个************可以被视为struct失败的指针,那P::************对我来说真的没有任何意义.这是标准的C++吗?

c++ boost pointers

80
推荐指数
3
解决办法
4230
查看次数