打印函数中定义的指针的值和地址?

时间:2015-10-02 19:15:54

标签: c pointers

我认为这对代码来说非常简单,但我在C语法中遇到问题,我只是用C ++编写。

#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %x\n", &iptr );

/*Print the address pointed to by iptr*/

/*Print the address of iptr itself*/
}

int main(){

void pointerFuncA(int* iptr); 

return 0;
}

显然这段代码只是一个骨架,但我想知道如何在函数和主要工作之间进行通信,以及打印指向的地址和iptr本身的语法?由于函数无效,如何将所有三个值发送到main?

我认为地址是这样的:

printf("Address of iptr variable: %x\n", &iptr );

我知道这是一个简单的问题,但我在网上找到的所有例子都得到了价值,但它在主要内容定义为

int iptr = 0;

我需要创建一些任意值吗?

谢谢!

5 个答案:

答案 0 :(得分:13)

阅读评论

@JSONWebService
public class MBMessagesAsDiscussionPrimeServiceImpl extends MBMessagesAsDiscussionPrimeServiceBaseImpl {
    @Override
    public List<MBMessagesAsDiscussionPrime> getMessagesAsDiscussionPrime() throws SystemException {
        return mBMessagesAsDiscussionPrimeFinder.findByGroupId();
    }
}

输出:

#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %d\n", *iptr );

/*Print the address pointed to by iptr*/
printf("Value:  %p\n", iptr );

/*Print the address of iptr itself*/
printf("Value:  %p\n", &iptr );
}

int main(){
int i = 1234; //Create a variable to get the address of
int* foo = &i; //Get the address of the variable named i and pass it to the integer pointer named foo
pointerFuncA(foo); //Pass foo to the function. See I removed void here because we are not declaring a function, but calling it.

return 0;
}

答案 1 :(得分:6)

要访问指针指向的值,必须使用间接运算符*

要打印指针本身,只需访问没有运算符的指针变量。

要获取指针变量的地址,请使用&运算符。

void pointerFuncA(int* iptr){
    /*Print the value pointed to by iptr*/
    printf("Value:  %x\n", *iptr );

    /*Print the address pointed to by iptr*/
    printf("Address of value: %p\n", (void*)iptr);

    /*Print the address of iptr itself*/
    printf("Address of iptr: %p\n", (void*)&iptr);
}

%p格式运算符要求相应的参数为void*,因此必须将指针强制转换为此类型。

答案 2 :(得分:1)

int* iptr已经是一个指针,所以当你写作时,你不需要前面的&

printf("Address of iptr variable: %x\n", &iptr );

这是打印指针值的方法。

printf("Address of iptr variable: %p\n", (void*)iptr);

此外,pointerFuncA()的函数原型位于错误的位置,位于main()内。在被调用之前,它应该在任何函数之外。

答案 3 :(得分:1)

#include <stdio.h>
#include <stdlib.h>

void pointerFuncA(int* iptr){
/*Print the value pointed to by iptr*/
printf("Value:  %p\n", (void*) iptr );

/*Print the address pointed to by iptr*/

/*Print the address of iptr itself*/
}

int main(){
int iptr = 0;
pointerFuncA( &iptr); 

return 0;
}

我认为你正在考虑这样的事情,没有必要在主要部门再次重新定义这个功能....

答案 4 :(得分:1)

地址是一些以0x

开头的十六进制表示法写入的内存值

/ 指针iptr /

指向的值
printf("Value is: %i", *iptr);

指针指向的地址将是iptr指针本身的值

/ 打印iptr /

指向的地址
 printf("Address is: %p", iprt);

/ 打印iptr本身的地址 /

 printf("Address of iptr: %p", &iptr )