标签: pointers

在C中str == NULL和str [0] =='\ 0'之间有什么区别?

我想知道的区别str == NULLstr[0] == '\0':

int convert_to_float(char *str, double *num)
{
    if ((str == NULL) || (str[0] == '\0'))
        return(-1);

    *num = strtod(str, (char **)NULL);
    return(0);
}
Run Code Online (Sandbox Code Playgroud)

我在Linux上使用gcc.

c gcc pointers cstring

52
推荐指数
6
解决办法
9731
查看次数

C++在地图中插入unique_ptr

我有一个类型的C++对象 ObjectArray

typedef map<int64_t, std::unique_ptr<Class1>> ObjectArray;
Run Code Online (Sandbox Code Playgroud)

创建一个unique_ptr新的类型对象Class1并将其插入到类型的对象中的语法是什么ObjectArray

c++ pointers stl map unique-ptr

52
推荐指数
3
解决办法
5万
查看次数

C标准是否允许为指针分配任意值并递增它?

这段代码的行为是否定义得很好?

#include <stdio.h>
#include <stdint.h>

int main(void)
{
    void *ptr = (char *)0x01;
    size_t val;

    ptr = (char *)ptr + 1;
    val = (size_t)(uintptr_t)ptr;

    printf("%zu\n", val);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的意思是,我们可以为指针分配一些固定数字,即使它指向某个随机地址也会增加它吗?(我知道你不能取消引用它)

c pointers pointer-arithmetic language-lawyer

52
推荐指数
4
解决办法
5292
查看次数

什么是双星(例如NSError**)?

所以,我看到了这个:

error:(NSError **)error
Run Code Online (Sandbox Code Playgroud)

在苹果医生.为什么两颗星?有什么意义?

c cocoa pointers objective-c multiple-indirection

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

对解除引用的指针进行后递增?

试图理解C中指针的行为,我对以下内容感到有点惊讶(下面的示例代码):

#include <stdio.h>

void add_one_v1(int *our_var_ptr)
{
    *our_var_ptr = *our_var_ptr +1;
}

void add_one_v2(int *our_var_ptr)
{
    *our_var_ptr++;
}

int main()
{
    int testvar;

    testvar = 63;
    add_one_v1(&(testvar));         /* Try first version of the function */
    printf("%d\n", testvar);        /* Prints out 64                     */
    printf("@ %p\n\n", &(testvar));

    testvar = 63;
    add_one_v2(&(testvar));         /* Try first version of the function */
    printf("%d\n", testvar);        /* Prints 63 ?                       */
    printf("@ %p\n", &(testvar));   /* Address remains identical         */
}
Run Code Online (Sandbox Code Playgroud)

输出:

64
@ 0xbf84c6b0

63
@ 0xbf84c6b0 …
Run Code Online (Sandbox Code Playgroud)

c pointers operator-precedence

51
推荐指数
6
解决办法
4万
查看次数

"取消引用NULL指针"意味着什么?

我是C的完全新手,在我的大学工作期间,我遇到了代码中的注释,这些注释通常指的是取消引用NULL指针.我有在C#中的背景下,我已经得到通过,这可能是类似于"的NullReferenceException"你是在净得到的,但现在我有严重的怀疑.

有人可以用非专业人员的术语向我解释这是什么以及它为什么不好?

c pointers

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

从int*转换后,我的char指针指向无效值

我正在学习C编程语言,我刚开始用指针学习数组.我在这个问题上有问题,我希望输出必须是5但是2,有人可以解释原因吗?

int main(){
   int arr[] = {1, 2, 3, 4, 5};
   char *ptr = (char *) arr;
   printf("%d", *(ptr+4));
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

c arrays pointers

51
推荐指数
2
解决办法
2187
查看次数

Golang:何时使用指针

我是Go语言的新手,并且只有很少的C/C++背景,所以我很自然地想到何时使用指针以及什么时候不使用指针.虽然这个问题可能被认为是开放式的,但我想知道何时返回结构以及何时返回指针的一些指导原则(等同于何时接受结构/指针作为参数).

根据我的猜测,以下陈述成立:

  1. 结构体按值传递给函数.也就是说,在将结构传递给函数时会生成结构的副本.
  2. 如果我想通过引用传递结构,那么我会在函数定义中使用指针参数,并在调用函数时使用addressof运算符.
  3. 我想要通过引用传递结构的原因是因为我传入的结构要么很大,而且会对内存产生负担以使其按值传递(不太可能)或者如果我想对其进行更改复制我传入(更有可能).
  4. 作为3.)的推论,我应该通过值,除非我有上述原因之一通过引用.

我的假设是否正确?或者我错过了指针上的标记?

struct pointers go

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

为什么`&array`和`array`指向同一个地址?

到现在为止,我认为数组与指针相同.但我发现了一个奇怪的案例:

int array[5] = { 10,11,12,13,14};

std::cout << array << std::endl;
std::cout << &array << std::endl;
std::cout << &array[0] << std::endl;

int *pArray = new int[5];

std::cout << pArray << std::endl;
std::cout << &pArray << std::endl;
std::cout << &pArray[0] << std::endl;
Run Code Online (Sandbox Code Playgroud)

产量

0x7ffeed730ad0
0x7ffeed730ad0
0x7ffeed730ad0

0x7f906d400340
0x7ffeed730a30
0x7f906d400340
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,array并且&array具有相同的价值.但是pArray并且&pArray有不同的价值.如果数组与指针相同,则数组的地址应与数组不同.怎么可能array&array是一样的?如果array&array相同,保存数组值的内存的地址是什么?

c++ arrays pointers

51
推荐指数
1
解决办法
3258
查看次数

是否有可能通过指向另一个未释放子对象的指针来获得一个子对象的指针?

看下面这个简单的代码:

struct Point {
    int x;
    int y;
};

void something(int *);

int main() {
    Point p{1, 2};

    something(&p.x);

    return p.y;
}
Run Code Online (Sandbox Code Playgroud)

我希望main可以将返回值优化为return 2;,因为something它无法访问p.y,只能返回的指针p.x

但是,没有一个主要的编译器会优化mainto 的返回值2上帝保佑

如果仅允许访问,标准中是否存在可以something修改的内容?如果是,这是否取决于标准布局?p.yp.xPoint

如果我使用something(&p.y);,该return p.x;怎么办?

c++ pointers offsetof language-lawyer c++17

51
推荐指数
1
解决办法
1397
查看次数