标签: pointers

为什么我不需要带扫描的&符号?(在C中)

void getnums(int *a, int *b);

int main()   
{  
    int a;
    int b;
    int c;
    getnums(&a,&b);
    c = a + b;
    printf("a + b = %d\n", c);
    return 0;  
}

void getnums(int *a, int *b)
{ 
    printf("a:? ");
    scanf("%d", a);
    printf("b:? ");
    scanf("%d", b);
}
Run Code Online (Sandbox Code Playgroud)

为什么我不需要在scanfs中的a和b之前使用&符号?(该代码目前有效.)

c pointers function scanf ampersand

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

未分配的字符串如何存储在内存中以及如何引用它?

在这个例子中似乎两个字符串"jesus"都是等号(相同的内存位置).

printf("%p\n","jesus");
printf("%p\n","jesus");
Run Code Online (Sandbox Code Playgroud)

另请注意:

printf("%p\n",&"jesus");
printf("%p\n","jesus");
Run Code Online (Sandbox Code Playgroud)

打印相同,但:

char* ptrToString = "jesus";
char* ptrToString = &"jesus"; //ERROR
Run Code Online (Sandbox Code Playgroud)

所以我想知道如何将未分配的字符串存储在内存中以及如何指向它...

c string pointers reference char

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

指针地址如何具有不同的长度?

我刚刚执行了这个代码示例:

int *i = (int*) malloc( sizeof(int) );
printf( "%p, %p\n", &i , i );
Run Code Online (Sandbox Code Playgroud)

这就是我得到的:

0x7fff38fed6a8, 0x10f7010
Run Code Online (Sandbox Code Playgroud)

所以我想知道为什么第二个地址比第一个地址短?

c pointers c99 pointer-address

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

在C++中取消引用void指针

我正在尝试实现通用链表.节点的结构如下 -

typedef struct node{
        void *data;
        node *next;      
};
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试为数据分配地址时,假设例如对于int,例如 -

int n1=6;
node *temp;
temp = (node*)malloc(sizeof(node));
temp->data=&n1;
Run Code Online (Sandbox Code Playgroud)

如何从节点获取n1的值?如果我说 -

cout<<(*(temp->data));
Run Code Online (Sandbox Code Playgroud)

我明白了 -

`void*' is not a pointer-to-object type 
Run Code Online (Sandbox Code Playgroud)

当我为其分配int的地址时,无效指针是否被转换为int指针类型?

c c++ pointers linked-list

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

为什么这个条件会导致seg错误?

这是什么原因?我认为如果指针为null,则不会评估其余条件.

// doesn't work:
char *ptr = somefunction();

if (ptr && ptr[0] == '1' || ptr[0] == 't')
  // ...



// does work:
char *ptr = somefunction();
if (ptr)
    if (ptr[0] == '1' || ptr[0] == 't')
        // ...
Run Code Online (Sandbox Code Playgroud)

c pointers dereference

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

C++中的空指针

关于指针,我有几个问题.第一:

 ObjectType *p; 
 p->writeSomething();
Run Code Online (Sandbox Code Playgroud)

为什么在指针尚未初始化时可以在对象上调用方法?如果我运行该代码,我会在控制台窗口中获得"writeSomething()"的输出.第二:

ObjectType *p;
if(p==NULL) 
cout<<"Null pointer";//This is printed out
p = new ObjectType;
delete p;
if(p==NULL)
   cout<<"Null pointer";
else
   cout<<"Pointer is not null";//This is printed out
Run Code Online (Sandbox Code Playgroud)

为什么第二个if语句中的指针不为null,如何检查指针是否指向任何内存地址?我还想知道是否有任何方法可以检查程序执行完毕后是否还没有释放某些内存.例如,如果您忘记在代码中写入1个删除语句.

c++ pointers

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

c ++"没有匹配的函数来调用

当我尝试传入一个数组作为参数时,我得到:

"No matching function to call to ' table::retrieve(const char[16], item&, int)'
Run Code Online (Sandbox Code Playgroud)

我试图用这个函数调用

program.reference.retrieve("Abecean Longfin", program.client_item, 1);
Run Code Online (Sandbox Code Playgroud)

功能是

int table::retrieve(char item_in[],item*item_list, int name_flag)
Run Code Online (Sandbox Code Playgroud)

我确信这是一件我不理解的简单事情,但我是新手.

c++ arrays pointers parameter-passing

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

指向全局函数的本地指针

我想使用本地指针指向全局字符串.指针是本地指针,字符串是全局的.当我运行此代码时,将本地指针传递给函数"myfun"时,指针不会改变,即其指向地址不会改变.打印的值为"NULL".

谁能告诉我为什么这对gcc不起作用?

#include <stdio.h>

char *str[] = { "String #1", "Another string" };

void myfun( void * p, int i ) 
{ 
    p = ( void * ) &str[ i ][ 0 ]; 
}

int main( void ) 
{ 
    void * ptr1, * ptr2;

    myfun( ptr1, 0 ); 
    myfun( ptr2, 1 ); 
    printf( "%s\n%s\n", ptr1, ptr2 ); 
}
Run Code Online (Sandbox Code Playgroud)

c pointers global-variables local void-pointers

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

从整数转换为指针

我正在学习使用C++进行投射,之后的代码对我来说是神奇的.

#include <iostream>
using namespace std;

class Base {
public:
virtual void f() { }
};

#define SOME_VALUE 8

int main() {
cout << SOME_VALUE <<endl;
getchar();
}
Run Code Online (Sandbox Code Playgroud)

输出是:8

代码很简单,但SOME_VALUE是什么类型的?int,或double还是char?

之后更复杂:

#include <iostream>
using namespace std;

class Base {
public:
virtual void f() { }
};

#define SOME_VALUE 8
int main() {
cout << (Base*)SOME_VALUE-SOME_VALUE <<endl;
getchar();
}
Run Code Online (Sandbox Code Playgroud)

输出为:FFFFFFE8

遵循此代码,我可以理解SOME_VALUE是数字类型.我也测试sizeof(SOME_VALUE),输出为4.但如果SOME_WHAT是数字,它如何更改为对象指针?对象指针如何减去整数?

c++ pointers integer casting c-preprocessor

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

该指针如何为null而不是同时为null?

我遇到了这个奇怪的问题.基本上我有一个循环永远循环,在该循环的开始我打开一个文件,我写了一些东西到文件,然后在循环结束我关闭文件.适用于循环的第一次迭代,但在第二次迭代中我得到

*** glibc detected *** ./prog: double free or corruption (top): 
Run Code Online (Sandbox Code Playgroud)

fclose(data)在循环的第二次迭代期间,我已将其缩小到该行.显然,当您释放不止一次的内容时会发生此错误,但在此代码中该怎么可能?

while(1)
{
    if (data == NULL)
    { 
        data = fopen(data_path, "w+");
    }

    /* do a bunch of stuff... */

    if (data != NULL)
    { 
        fclose(data);
    }
}
Run Code Online (Sandbox Code Playgroud)

一个陌生的事情是,如果我fclose(data)在程序运行后添加以下行没有任何问题:

 data = NULL;
Run Code Online (Sandbox Code Playgroud)

能比我更精通C的人能解释一下这里发生了什么吗?

c pointers

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