C中int变量和指针变量之间的差异

use*_*058 1 c pointers

#include <stdio.h>

int j;
int *ptr;

int main(void)
{
    j = 13232323;//adress I want to assign
    ptr = j;//assign the adress to the pointer
    printf("%d",ptr);
}
Run Code Online (Sandbox Code Playgroud)

OUTPUT:13232323

我是否错误地将地址直接分配给指针?指针不过是一个变量包含地址的形式价值,所以我构建了一个地址,然后将其分配给指针,它的作品,因为它应该是,但我不能构建包含字符ABCDEF地址,那么,什么是int和指针之间的最大区别?

编辑:此代码仅代表测试目的

Mut*_*han 6

实际上你的尝试是出于你的渴望.我同意,我经常这样做.

第一件事情是,如果你存储13232323在一个指针变量,它的十六进制值OXC9E8C3,所以真的在你指定变量的指针(PTR)不列入知道是否真的是一个有效的地址或无效地址的时间.但是当你取消引用这个地址时*ptr,就会出现问题.它试图在地址中寻找价值.然后有2个案例..

  1. 真的,如果你指定的是有效地址,那么它将返回该值.(几乎不可能的情况)
  2. 大多数情况下,您的地址将是无效的,因此程序将崩溃(分段错误).

因此,即使您的程序编译,运行,直到并且除非您在ptr.中存储有效地址,否则无用ptr.

你的问:除了我不能构造一个包含字符ABCDEF的地址外,它的工作原理是什么,所以,int和指针之间的区别是什么?的printf( "%d",PTR);

我想你问,无论如何,我都无法存储ABCDEF,因此ptr工作方式相同int type,那么整数和指针有什么区别?

这里是 :

  1. 您不能使用整数值,因为指针可以执行此操作.因此它被称为指针:)
  2. 您只看到数字,因为您正在打印地址%d,尝试使用%x或打印%p.

您是否注意到编译器警告,warning: assignment makes pointer from integer without a cast因为ptr = j;ptrint*类型的,并且jint 类型的.