Pointer1
指向5
。
Pointer2
指向3
。
我想乘以5 * 3,但我只有指针。我怎么用C做这个?
此外,uint32_t *pointer
在以下时间的含义:
pointer[2] = {1, 2};
答案 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 int
和uint32_t
通常是等效类型,具体取决于您的编译器。)
如果我在没有更多信息的情况下看到简单地读取uint32_t* pointer
的声明,我将假设它是指向单个值的指针,并且在这样的指针上使用索引运算符[n]
基本上是溢出单元素大小的缓冲区。但是,如果指针被赋予数组或缓冲区函数的结果(例如malloc
,calloc
等),则使用索引运算符很好,但我更希望看到使用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)]
}
您的误解是指针不引用值,例如5
和3
。
指针指的是变量,例如variableA
和variableB
;这些变量具有可以通过指针访问和更改的值。
但指针只引用变量,而不是直接指向它后面的值。
答案 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;
}