c语言 请教 堆 栈 区的问题 .

如题 :
现在是有一个函数接收char *参数,指针指向的有可能是变量也可能是内存 ​
​如果是动态内存 本函数就不申请内存了, 如果内存不够就扩充内存
​如果是变量或者指向变量的指针那就把申请内存替代变量(因为数据长度有可能会变化)

目前 不太清楚如让程序何区分是变量还是内存 ?
以下是 char 类型 内存 指针 变量 打印出的指针地址
%p 动态内存:0xf512a0 空指针:0x40164d 变量:0x7ffd3798d7a3 指向变量的指针:0x7ffd3798d7a3
%d 动态内存:16061088 空指针:4200013 变量:932763555 指向变量的指针:932763555

通过观察发现 动态内存,地址 7-8位数 ,变量地址9-10 且有正有负 ,
那能不能通过地址位数来判断 分区也就是 动态内存还是变量 呢?
这样做程序可靠吗?
或者有没有什么其他正规的方法?