乘以指针指向的东西

时间:2014-02-27 02:58:10

标签: c pointers

Pointer1指向5

Pointer2指向3

我想乘以5 * 3,但我只有指针。我怎么用C做这个?

此外,uint32_t *pointer在以下时间的含义:

pointer[2] = {1, 2};

5 个答案:

答案 0 :(得分:1)

我不知道答案者对这个问题的理解是多么困难。显然是关于取消引用指针。

这是显示它指向的指针内容的方式:

#include <stdio.h>

int main(void)
{

        int num1 = 5;
        int num2 = 3;
        int* num1_ptr = &num1;
        int* num2_ptr - &num2;
        int sum = *num1_ptr * *num2_ptr;
        printf("%d\n", sum);
        return 0;

}

* num1_ptr和* num2_ptr接受指针并引用该内存地址的内容。

答案 1 :(得分:0)

我无法在没有更多信息的情况下回答问题的前半部分,但uint32_t* pointer只是指向无符号32位整数值的指针(unsigned intuint32_t通常是等效类型,具体取决于您的编译器。)

如果我在没有更多信息的情况下看到简单地读取uint32_t* pointer的声明,我将假设它是指向单个值的指针,并且在这样的指针上使用索引运算符[n]基本上是溢出单元素大小的缓冲区。但是,如果指针被赋予数组或缓冲区函数的结果(例如malloccalloc等),则使用索引运算符很好,但我更希望看到使用uint32_t pointer[]作为声明,因为它可以更容易地确定开发人员的意图。

答案 2 :(得分:0)

uint32_t *pointer只是一个带有垃圾值的指针,除非你指出它。

pointer[0] = 1;
pointer[1] = 2;

仅在您之前将其指向某个类型为uint32_t且至少为大小为2的数组或包含uint32_t使用malloc定义的块时才有效,如下所示:

uint32_t *pointer;

pointer = (uint32_t*)malloc(sizeof(int*SIZE); //SIZE > 2 here

uint32_t array[10];

pointer = & array[0]; // also, pointer = array; would also work.

答案 3 :(得分:0)

int main(void)
{
    int variableA = 5;
    int variableB = 3;
    int* ptr1  = &variableA;  // Pointer1 points to 5.
    int* ptr2  = &variableB;  // Pointer2 points to 3.

    int answer;

    answer = (*ptr1) * (*ptr2);  // I want to multiply 5*3, but I only have the pointers. 
    // Answer gets set to [value stored at ptr1(5)] MultipliedBy [value stored at ptr2(3)]
}

您的误解是指针不引用,例如53
指针指的是变量,例如variableAvariableB;这些变量具有可以通过指针访问和更改的值。

但指针只引用变量,而不是直接指向它后面的值。

答案 4 :(得分:0)

定义一个乘法函数,它将两个指针变量作为参数,然后返回指针。从主调用这个函数

   #include<iostream>
   using namespace std;

   int *multiply(int *x,int* y)
   {
      int  mul;      
      mul = (*x)*(*y); 
      int *c; 
      c = &mul;        
      return c;            
   }


int main(){

int x,y;
x = 4;
y = 5;
int *result;         
result = multiply(&x,&y);
cout<<*result<<endl;

return 0;
}