标签: pointers

C++ - 函数,参数和指针 - 访问冲突

我决定学习C++以前编程知识非常有限.我目前正在以下的书跳进C++亚历克斯·阿兰.我已经点了指针的章节,作为练习问题的一部分,我遇到了以下问题:

  1. 编写一个函数,提示用户输入他或她的名字和姓氏,作为两个单独的值.此函数应通过传递给函数的其他指针(或引用)参数将两个值都返回给调用者.首先尝试使用指针然后使用引用.

这是我写的代码:

#include <iostream>

void getDetails(char * n, char * s)
{
    std::cout << "Input name: ";
    std::cin >> *n;

    std::cout << "\n";

    std::cout << "Input surname: ";
    std::cin >> *s;
}

int main()
{
    char *name = NULL;
    char *surname = NULL;

    getDetails(name, surname);

    std::cout << "Name: " << *name << "\n";
    std::cout << "Surname: " << *surname << "\n";

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

我一直遇到访问冲突错误,我完全不知道为什么.

  1. 我究竟做错了什么?
  2. 为什么这是错的?

c++ pointers function

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

指针是先分配还是递增?

当你有声明时:

*str++ = *end

是否为*strget赋值*end或者是否增加了值,然后为其赋值*end

c pointers increment

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

为什么printf(inputString)是一个安全漏洞?

我在Quora上读到一个答案,我遇到了一些简单的事情:

char* inputString;
printf(inputString);
Run Code Online (Sandbox Code Playgroud)

是一个安全漏洞.

我假设inputString不是简单的未初始化,而是在两个语句之间用一些外部输入初始化.

如何准确,这是一个安全漏洞?

Quora的原始答案在这里:

如果C和C++提供最佳性能,为什么我们仍然使用其他语言编写代码?

但它没有为此声明提供额外的背景信息.

c c++ printf pointers

0
推荐指数
2
解决办法
962
查看次数

C ++:指针,在寻找目标地址?

我确定这一定是以前被问过的,但我找不到它。

基本上,我在看这些变量:

unsigned short* bufferName = 0;
unsigned short* pBuffer = 0;
bufferName = new unsigned short[6400];
pBuffer = bufferName;
cout << &bufferName << &pBuffer
Run Code Online (Sandbox Code Playgroud)

此设置可以读取6400像素(每个= 2字节)bufferName。该变量pBuffer用于跟踪bufferName的内存块中。

cout5行上的语句打印每个地址。但是,一旦我增加:pBuffer,如何找到它指向的新地址?

非常感谢您的耐心和时间。我知道这篇文章对我所做的事情很短,但是我想故意使它简短。

c++ pointers

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

*a = b和a =&b之间的差异?

两者之间有什么不同,如果有的话

*a = b;
Run Code Online (Sandbox Code Playgroud)

a = &b;
Run Code Online (Sandbox Code Playgroud)

这两种不同的方法是将var指向另一个var吗?

c pointers

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

为什么我的sizeof(arr)/ sizeof(arr [0])= 1?

typedef struct {
  double *x;
  int points;
} Polygon;



polygon[cc].points = readobject(polygon[cc].file); //lets say equals 15
polygon[cc].x = (double *) malloc(polygon[cc].points * sizeof(double));

printf("%d\n", sizeof(polygon[cc].x) / sizeof(polygon[cc].x[0]));
//This prints out on 1
Run Code Online (Sandbox Code Playgroud)

我测试初始化xx[100],然后它工作,但不应该malloc()调用设置结构的数组x[15]?它只是测量两个doubles 的字节吗?

c arrays malloc struct pointers

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

c ++删除指针,然后访问它指向的值

我刚学习了C++指针和删除指针.我自己尝试了这个代码

# include<iostream>

using namespace std;

int main(){
    int num = 10;
    int *p = new int;

    p = &num;
    cout << *p << endl;
    delete p;
    cout << num << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

删除指针后p,我无法打印值num.但如果我p在程序的最后删除,cout << num << endl;会给我10.任何人都知道我在哪里运行?

c++ pointers

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

尝试在指向struct的指针内的m​​alloc数组时出现分段错误

我正在尝试为像这样的结构内部的数组分配内存:

    typedef struct
    {
        int a;
        int *b;
    } MyStruct;
Run Code Online (Sandbox Code Playgroud)

我有一个初始化结构的函数,如下所示:

    void init( MyStruct * myStruct, int size )
    {
        myStruct = malloc( sizeof( MyStruct ) );
        myStruct->a = size;
        myStruct->b = malloc( size * sizeof( int ) );
    }
Run Code Online (Sandbox Code Playgroud)

但是当我尝试为数组b中的字段分配内存时,我得到了分段错误错误

    int main( void )
    {
        int i, size = 5;
        MyStruct *myStruct;
        init( myStruct, size );

        for( i = 0; i < size; i++ )
        {
            myStruct->b[i] = malloc( sizeof( int ) ); //fails here
            myStruct->b[i] = i*i;
        } …
Run Code Online (Sandbox Code Playgroud)

c arrays malloc struct pointers

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

为什么我可以将字符串存储在char的内存地址中?

我开始理解指针以及如何取消引用它们等等.我一直在用ints 练习,但我认为它char会表现得相似.使用*取消引用,使用&访问内存地址.

但在下面的示例中,使用相同的语法来设置a的地址char并将字符串保存到同一个变量中.这是如何运作的?我想我一般都很困惑,也许我正在思考它.

int main()
{
    char *myCharPointer;
    char charMemoryHolder = 'G';
    myCharPointer = &charMemoryHolder;
    printf("%s\n", myCharPointer);
    myCharPointer = "This is a string.";
    printf("%s\n", myCharPointer);

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

c string pointers char memory-address

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

为什么我不能在有针对性的值上使用++?

我刚刚注意到一些我对指针和++运算符不太了解的东西.让我们检查一下这段代码

int test = 0;
int* pTest = &test;

*pTest = *pTest + 1;
*pTest++;
Run Code Online (Sandbox Code Playgroud)

当第一次编写这段代码而不试用它时,我期望最后两行做同样的事情并测试得到值2,但是最后一行增加了指针地址一个,这就是刚才

pTest++;
Run Code Online (Sandbox Code Playgroud)

会做.我只是遗漏了一些非常明显的东西,或者为什么

*pTest++;
Run Code Online (Sandbox Code Playgroud)

pTest++;
Run Code Online (Sandbox Code Playgroud)

做同样的事情?

c++ pointers

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

标签 统计

pointers ×10

c ×6

c++ ×5

arrays ×2

malloc ×2

struct ×2

char ×1

function ×1

increment ×1

memory-address ×1

printf ×1

string ×1