关于指针基本问题

作者&投稿:佐毅 (若有异议请与网页底部的电邮联系)
1。分配一个变量,内存空间就会划给这个变量一个空间,空间的地址就像房间的编号,你可以按照编号找到地址,但分给你的空间大小不是p=NULL后面那个NULL,是sizeof(p)!,换句话说不是你的空间大小是NULL,而是你的空间放的东西是"NULL",而你的空间大小,那是sizeof的问题。

2。首先你这个写法不对,判断相等应该是双等号==,不是=,也就是说是p==NULL,不是p=NULL,p=NULL是赋值不是判断,是把NULL这个值赋给p,而不是判断p是否是NULL。而p==NULL,这不是判断这个空间是否有大小,而是判断p这个房间里存放的东西是不是NULL,也就是说p的值是不是NULL——在第一条的答案里已经说过,空间大小是一回事,空间里放的东西是一回事。

3。从上面所说你应该已经看出来“*q有大小”这个说法是错误的了,不是"*q"有大小而是这个地方有具体数值。可以推测,你说的有大小就是*q被付了值。但是还有一个问题我不得不问你,你看到的赋值语句是“q=”,还是"*q="?要知道,差了一个星号意思差的太远了!q=的意思是q这个地址被指定了,相当于q这个房间里放置了指定房间的钥匙。而*q=的意思是这个钥匙指向的房间里放了什么东西!你拿到钥匙和房间被放了什么东西可不是一个意思。
所以我要继续问下面的问题:你确定看到的是p=q,不是*p=*q也不是*p=q也不是p=*q,如果你说确实是p = q,那就好办了,那就是说你的房间钥匙q,被复制了一把,也就是p。这两个钥匙可以开同一个房间。但是,你的说法错误,是p的值等于q的值,地址就是他们的值。而不是p的地址等于q的地址,还是那句话,地址相当于钥匙,房子里的东西才叫做值,这里p,q都是指针,他们的值是他们房间里的东西,这个东西,因为他们是地址,所以也是钥匙,指向另一个房间。他们的地址,是他们本身的钥匙。

4。当p=q了,那么*p和*q自然是一个值,p和q相当于一个房间的两把钥匙,自然*q(相当于q房间的东西)和*p(p房间里的东西,这不一样吗,p和q开的房间是一个阿)也是一样的。

总之:类型 *指针名称(例如int *p),这种声明,是声明了一个指向“类型”地址的指针,这个指针本身有自己的地址,也就是说它有自己的房间,只是,他的房间里的东西,是指向声明类型的某房间的路标和钥匙。

首先纠正你叙述上的错误:说某某有“大小”不准确。如你说的“空间大小”应该理解成“占内存空间大小”即该指针所需内存字节数;而指针p的值或许为NULL。
1.给指针p在内存空间分配了地址不假,其空间的大小为一个字(WORD)的大小(32位系统为4个字节,16位系统为2个字节)。但它的内容(值)是随机的,很多时候不为NULL。
2.if(p=NULL),是将NULL的值存入p的同时,判断是否成立。这里“=”是赋值,不是判断(“==”)。这种写法等价于:if((p=NULL)==1)...
“又有int *q, 且*q有大小”,是不是想说*q已经有了值?或许象这样:int a=5,*q=&a; 这时*q的值为5,如果是这个意思吧,则:
3.p=q是表示让p也指向q所指向的地点,如上段的“或许”中:p、q均指向a。
4.仍如“或许”中,*p与*q的值均为a的值(5)

1 错 LZ貌似还没弄清一般变量跟指针变量的区别 p=NULL 是指指针P所指向的内存空间为NULL 定义一个int *p 只是为*p 这个变量申请了一个内存空间 其类型是unsing int 类型 大小为4
2 错
3 错
4 错
个人观点

回答这些问题之前,我想知道楼主有没有弄清楚指针的含义.

声明一个指针变量,不管前面是int 还是什么,占用的内存都是4字节.因为它里面只是存的一个(指向变量的)地址..不管你指向什么东西,这个地址的大小都是不变的.就好比,不管你怎么换手机号,你的手机号长度都是11位. 就是说,1的说法是错的.

NULL一般情况下等同于0. 指针变量里存放的地址是0的话,就没指向任何东西,那种指针叫空指针.所以2的说法也是错的.

指针自己本身也有地址,所以才有那种指向指针的指针变量.就好像楼主有两部手机,呼叫两部手机都能找到楼主,但是两部手机本身又不是一个东西. 所以3,4也是错的.

1. 已经分配了内存,但是一个随机数,而不是NULL,不能混淆,该定义分配的内存空间大小是sizeof(int *).
NULL指针:标准定义了NULL指针,它作为一个特殊的指针变量,表示不指向任何东西。要使一个指针变量为NULL,可以给它赋一个零值。为了测试一个指针变量是否为NULL,你可以将它与零值进行比较。
2. 这里应该是 if(p == NULL),判断p是否是一个空指针,并不是判断其空间大小,空间大小是固定的.
3. 这里应该说指针q有指向的对象,即*q有值.p=q是将q中的值拷贝到p中,即p也指向q所指向的对象,而不是p的地址等于指针q的地址.
4. *p和*q的值是一样的,因为p指针和q指针指向同一个对象.

关于指针的几个基本问题!~

*,++,同一优先级。右到左方向。
y = *pb++; /* y = *pb, pb++; y = 3 pb通常会指a */
y = *(pb++); /* pb指向a, y = a */
y = *++pb; /* ++pb后指向a, y = a */
y = *(++pb); /*同上*/
y = (*pb)++; /* y = *pb = b, (*pb)++ = b++ -> b = 4; */
y = ++(*pb); /* pb指向b, y = ++b = 4, b = 4;

跟指针关系不太大 把scnaf里的逗号去掉就行了

或者你在输入的时候1,2这样输入 格式化输入里加的什么东西在输入的时候都要加上
比如scanf("%d.%d",&a,&b);你要输入就要输入1.2这样的 这样才会把1赋值给a 把2赋值给b

要么%d之间什么都不加 这样输入的时候就可以简单以空白符(空格或者回车之类的)隔开

C++指针问题求教:原来是 int a[5]={10,20,30,40,50} int *p=a; int...
答:int*&r=p这里的r是一个int*类型的引用,此时r等价于p int&r=p这里的r是一个int型的引用,它只能等于一个int变量

C语言中指针的地址问题
答:首先我要指出的是根指针的地址与指针存储的地址一般不可能相同~!(一楼列出的情况除外,将指针的地址赋给一个变量再将变量的地址赋给指针)举个例子:int number,*p;number=1;p=&number;你可以这样理解,number 和 *p都是一个整型数据变量,程序在内存中 为它们都保留了一个地址(两个不同的地址...

时钟问题详细资料大全
答:时钟问题有别于其他行程问题是因为它的速度和总路程的度量方式不再是常规的米每秒或者千米每小时,而是2个指针“每分钟走多少角度”或者“每分钟走多少小格”。对于正常的时钟, 具体为:整个钟面为360度,上面有12个大格,每个大格为30度;60个小格,每个小格为6度。 分针速度:每分钟走1小格,每分钟走6度 时针速度...

c语言指针和函数的问题
答:一、 函数参数传递机制的基本理论 函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。以下讨论称调用其他函数的函数为主调函数,被调用的函数为被调函数。 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数...

c语言非常基本问题的疑惑。。一个初学者的烦恼!
答:看了你的问题, 主要在于指针方面,毕竟指针是C的精华, 是要下点功夫才能搞懂!1. 3x^n/(2x-1) 不能写成 3*pow(x,n)*(1/(2x-1)) 因为括号的优先级比*高,它会先算1/(2x-1), 1/(2x-1)要么=0, 要么=1; 所以应写成(3*pow(x,n))/(2x-1)2. 转义字符也占占空间,但只占一个...

摩托车码表的指针问题
答:这种情况只能换表了,是仪表里面的磁铁和游丝坏了,无法修复。

C++问题(指针&引用)?
答:所以嵌入式开发基本上都是用C语言而不是C++。你会发现Java、Python、PHP等语言都已经抛弃了指针的概念,都只有引用。所以C++里没必要再用指针了,会引用就行。至于你的第二个问题,那是引用的基本定义,如果直接int r=i,和最基础的变量定义一样,怎么可能是引用。

VC中new指针释放问题
答:指针在程序中往往有很多细节问题,比如 1、指针作为返回值,某个分支中进行赋值返回,另一个分支却没有值。2、指针作为函数参数传递,却在函数中释放了,函数体外该指针无效了。3、在函数中修改一个指针,让其指向了另一块新的地址,则需要将原地址空间释放。4、新声明一个指针是要初始化为NULL;对...

C语言中数组和指针的问题。
答:滥用这个概念这只会使所要讨论的问题更容易被混淆。另外,建议LZ系统地复习至少这些基本概念:对象、左值、类型和值,如果看不懂以下内容的话。数组是数组,指针是指针。a是a,a[0]是a[0]。只不过在作为sizeof、&的操作数等有限几个左值上下文之外的场合数组a会退化(隐式转换,结果的类型是元素的...

c语言中的指针是什么?
答:表示成员选择(指针),选择结构体的成员变量。1、结构:运算符 -> 是指向结构体成员运算符,结合方向为自左向右。2、用法:对象指针->成员名。举例说明如下: