定义指针的指针的时候应该用int数据类型,但是好像这样会出现问题
定义指针是什么数据类型的时候,应该看指针所指向的数据的类型,同时指针在内存中占四个字节,那么定义指针的指针在选择数据类型的时候应该选择整型对吗?因为整型刚好占据四个字节#include <stdio.h>
void main()
{
char num = 90;
char *p = #
int **pp = &p;
printf("size of p:%d\n",sizeof(p));
printf("num: %d\n",num);
printf("*p: %d\n",*p);
printf("**p: %d\n",**pp);
}
代码如上,指针p所指向的是num,num是char类型,因此定义指针p的时候用char *p;
而指针pp所指向的是p,p是一个占据了四个字节的指针,因此定义p的时候应该使用整型;
但是运行程序,打印出来的结果如下
size of p:4
num: 90
*p: 90
**p: -858993574
Press any key to continue
**pp所对应的值便出现了问题,若把格式控制符%d改成%c,输出便正常,请问哪里错了?
本帖最后由 啊涂涂 于 2019-2-21 11:01 编辑
兄弟,这个概念你给弄混淆了。首先对于32位系统,定义一个指针变量,那么系统就需要为这个指针变量开辟一个四个字节的空间,这就证明了这个指针的大小是四个字节。而指针变量我们是用来存放其他变量的地址的,所以就会有 int *p, char *p, double *p 这些个指针变量类型,*p 前面的 int, char, double 等等所表达的都是指针变量所指向的数据类型,而不是指针本身的数据类型。像你写的那个 **pp ,首先是定义了一个指针指针的指针,所以这个 **pp 的类型必须是和他所指向的指针指向的数据内容保持一致的
char a = 'A';
char *p = &a (我们说指针p指向a, char表达的是 a 是哪个类型的数据)
char **pp (定义一个指向指针的指针,准备要指向 *p)
char **pp = &p(因为指针变量p指向的是字符类型,现在想把pp指向p,所以pp的类型也要是char类型才可以) 考察一下代码:
char c , * p ;
intd , * q ;
. . . . . .
c = * p ;
d = * q ;
p 、q 同是指针,却类型不同,因为这个不同,在代码编译的时候,对指令 c = * p,会处理成从内存地址 p 处取 1 个字节赋值给变量 c,对指令 d = * q,会处理成从内存地址 q 取 4 个字节赋值给变量 d,这就是不同指针类型带来的差异。
页:
[1]