![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
C 语言 指针变量的定义问题
inta;//a=20;int*pa=&a;a=20;printf("%d",*pa);VS2010,如果在定义一个整形变量后,马上赋值(就是第二行),第三行定义指针就报...
int a;
//a=20;
int * pa=&a;
a=20;
printf("%d",*pa);
VS 2010,如果在定义一个整形变量后,马上赋值(就是第二行),第三行定义指针就报错,提示少分号,但如果用第四行,就是先定义指针,再赋值 ,就不会错,请教原因? 展开
//a=20;
int * pa=&a;
a=20;
printf("%d",*pa);
VS 2010,如果在定义一个整形变量后,马上赋值(就是第二行),第三行定义指针就报错,提示少分号,但如果用第四行,就是先定义指针,再赋值 ,就不会错,请教原因? 展开
展开全部
指针变量的定义
指针变量有三个属性:
(1)该指针变量指向的变量的类型。如i_pointer指向的变量i是整型。
(2)该指针变量在内存中占多少内存单元。如i_pointer占两个内存单元,称为“近指针”,用near表示。如果该变量在内存中占4个内存单元,称为“远指针”,用far表示。如果未指定near或far,缺省是near。(指针变量在内存中要么占2个内存单元,要么占4个内存单元)。
(3)该指针变量指向哪一个变量,即该指针变量的值是多少。如i_pointer的值是2000。
指针变量定义的一般形式:
类型标识符 * 标识符
“*”表示定义指针变量
“标识符”是指针变量名
“类型标识符”表示该指针变量所指向的变量类型。
例、
int i,j; /* 定义两个整型变量 */
int *pointer_1, *pointer_2;
float *pointer_3;
char *pointer_4;
void *pointer_5;
char far *pointer_6;
指针变量的赋值:例、
pointer_1 = &i;
pointer_2 = &j;
注意,指针变量中只能存放地址,不能将一个非地址类型的数据(如常数等)赋给一个指针变量,如:
pointer_1 = 100;
也可以在定义指针变量的同时指定其初值,如、
int a;
int *p = &a;
指针变量有三个属性:
(1)该指针变量指向的变量的类型。如i_pointer指向的变量i是整型。
(2)该指针变量在内存中占多少内存单元。如i_pointer占两个内存单元,称为“近指针”,用near表示。如果该变量在内存中占4个内存单元,称为“远指针”,用far表示。如果未指定near或far,缺省是near。(指针变量在内存中要么占2个内存单元,要么占4个内存单元)。
(3)该指针变量指向哪一个变量,即该指针变量的值是多少。如i_pointer的值是2000。
指针变量定义的一般形式:
类型标识符 * 标识符
“*”表示定义指针变量
“标识符”是指针变量名
“类型标识符”表示该指针变量所指向的变量类型。
例、
int i,j; /* 定义两个整型变量 */
int *pointer_1, *pointer_2;
float *pointer_3;
char *pointer_4;
void *pointer_5;
char far *pointer_6;
指针变量的赋值:例、
pointer_1 = &i;
pointer_2 = &j;
注意,指针变量中只能存放地址,不能将一个非地址类型的数据(如常数等)赋给一个指针变量,如:
pointer_1 = 100;
也可以在定义指针变量的同时指定其初值,如、
int a;
int *p = &a;
展开全部
C语言里面的指针和数组是很有趣的。
例如定义数组a[10],你可以通过a[1]访问里面的元素,也可以通过*(a+1),来访问。
为什么这里可以这样用呢?
ptr的类型为(int *),所以ptr在内存里面存放的就是int类型的指针,指向了某个int地址。正常情况下,你可以通过ptr访问它指向的某一个地址里面的数据,如下图可以看到22。
你这里的程序里面有一个malloc函数,它的功能就是申请空间,本来只有一个空间的,申请之后就可以有很多连续的空间了。这个时候如果ptr里面的值0000001加上1就指向了22下方的空间了,可以继续存东西了,如图所示。
这就是指针有趣的地方所在,它可以直接控制地址空间。ptr[i]的意思就是 就和*(ptr+i)一样。
所以scanf的时候可以直接往ptr[i]这个地址放东西。
类似的,char *p也可以变成数组,只要你给了他空间。这个在数据结构和算法里面用得很多,也很有意思,不过容易把自己绕晕。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
int a;
a=20;
int *pa=&a;
printf("%d",*pa);
//这种方法是错误的!原因,c语言中的变量,都是先定以后使用,并且,在c语言中的变量是定义都放在语句首,但在c++中,则可以随用随定义。
**************************************************************************************Mr Computer
a=20;
int *pa=&a;
printf("%d",*pa);
//这种方法是错误的!原因,c语言中的变量,都是先定以后使用,并且,在c语言中的变量是定义都放在语句首,但在c++中,则可以随用随定义。
**************************************************************************************Mr Computer
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不会呀,我用vs2005试了,两种方法都可以,没有错
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2012-01-30
展开全部
没发现错误,能把你code全部贴出来吗?
更多追问追答
追问
这个差不多就是全部代码了
#include
#include
int main(int argc,char * argv[]) {
int a;
//a=20; 有这行,下面的就报错
int * pa=&a;
a=20;
printf("%d",*pa);
return 0;
}
追答
我用的VC 没发现报错 你把编译的clean一次 重新build看看
参考资料: VC
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询