int *p=null;
int i=5;
*p=i;
p=&i;
*p=&i;
p=i;
上述各种赋值方法,到底何区别?大侠··
17 个解决方案
#1
int *p=null;
int i=5;
*p=i; //出错 还没有指向某个地址 就取值了
p=&i; //对的 最常见的用法
*p=&i; //类型不一致
p=i; //类型不一致 出错
#2
*p=i;和p=&i;一样的...
*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;
多看看指针相关的内容吧...
*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;
多看看指针相关的内容吧...
#3
第一个我到某本书上看到过这个用法,第三个我看过***p=&i的用法, 就是前面有三个*;
麻烦解释下,是书上的错误吗?我打算换一本书·
#4
int *p=null;
int i=5;
*p=i;//这个是对指针P所指的内存位置赋值(要是p为野指针或指null的话会报错)
p=&i;//这个是把i的地址赋给p
*p=&i;//这个类型不匹配
p=i;//这个类型不匹配
#5
int *p=null;-----整形指针p赋值为空
int i=5;-----整形i赋值为5
*p=i;----指针p解引用用变量i赋值
p=&i;----指针p指向整形变量i的地址
*p=&i;--错误
p=i; --错误
不同类型变量不能互相赋值
int i=5;-----整形i赋值为5
*p=i;----指针p解引用用变量i赋值
p=&i;----指针p指向整形变量i的地址
*p=&i;--错误
p=i; --错误
不同类型变量不能互相赋值
#6
正解~~
#7
我也知道是一样的说法,但是,不明白其中的机制,举例说明下,各个时候 P 、I各个的值,和类型!
谢谢了~~~~~~~~~~
#8
int *p=&i 和 *p=&i
前一个的意思是不是可以大概写成这样 int *(p=&i) / 后一个就是错的了吗?如果i变量内存里面恰好也是个指针类型的就可以了如i的值为0000fff00 是吗?
#9
int *p = &i; 这叫做 定义时 赋值
展开看
int *p;
p = &i;
*p = &i;
没有这么干的
#10
额,,,刚才我说的不对...差点误人子弟- -
其实指针p存储的是内存的地址....通过*p来访问该地址存储的数据
int *p=null; //p=0;
int i=5; //变量i=5;假设i的内存地址:0x00abcedf
*p=i; //地址为0的内存区域被赋值5...这句有问题...
p=&i;//p=0x00abcedf,即i的内存地址..这句没问题...
*p=&i;//p指向的内存区域被赋值0x00abcedf也需要类型转化*p=(int)&i;
p=i; //这句需要类型转换...p=(int*)i....p=5
#11
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
#12
现在从事.NET开发,突然觉得.net太白痴,就想学学以前读书时的C语言和数据结构。
回复11楼的兄弟,我其实以前也想从事C++或汇编的,早就认识了他的强大,但是无奈老师讲过一遍汇编,让我从清晰逐渐走向糊涂,然后走向深渊,最后放弃。。。现在汇编的书都给卖了··其余的C语言和C++还留着···哎·····
回复11楼的兄弟,我其实以前也想从事C++或汇编的,早就认识了他的强大,但是无奈老师讲过一遍汇编,让我从清晰逐渐走向糊涂,然后走向深渊,最后放弃。。。现在汇编的书都给卖了··其余的C语言和C++还留着···哎·····
#13
二楼上面说的没一句是对的。
*p =i p =&i 怎能一样呢?前者是指针p已经指向一个有效地址,然后把指向的地址赋值为与i相同的值,实际是有内存复制的过程,后者是将指针p直接指向变量i所在的内存,改变了指针的指向,并没有复制数据。
再看后面,*p =&i ,p =(int *)i
前者p仍然已指向(假设,若非就出错)一个有效地址,将这个地址里的内容赋值为i的地址,后者是改变指针p的指向为变量i的内容,这两个都意义不大,假设:变量i地址为1FFF0,其内容是整数10,那么,*p =&i 指针指向的内容变成1FFF0,p =(int *)i,指针指向转为10 这个地址,而地址10处的内容是什么就完全不知道了……二楼纯属误人子弟,像这样的事情我发现这个论坛还有不少,希望大家能多思考,把正确的东西讨论出来,不要让错误的结论流传起来。
*p =i p =&i 怎能一样呢?前者是指针p已经指向一个有效地址,然后把指向的地址赋值为与i相同的值,实际是有内存复制的过程,后者是将指针p直接指向变量i所在的内存,改变了指针的指向,并没有复制数据。
再看后面,*p =&i ,p =(int *)i
前者p仍然已指向(假设,若非就出错)一个有效地址,将这个地址里的内容赋值为i的地址,后者是改变指针p的指向为变量i的内容,这两个都意义不大,假设:变量i地址为1FFF0,其内容是整数10,那么,*p =&i 指针指向的内容变成1FFF0,p =(int *)i,指针指向转为10 这个地址,而地址10处的内容是什么就完全不知道了……二楼纯属误人子弟,像这样的事情我发现这个论坛还有不少,希望大家能多思考,把正确的东西讨论出来,不要让错误的结论流传起来。
#14
int *p=null;//定义整形指针p,给p赋初值为空;
int i=5;//定义整形变量i,赋初值为5;
*p=i;//VC6.0 让P所指向的值为i的值。编译通过,但是运行是出错;
p=&i;// 让指针P指向i的地址,此时*p的值是5,编译通过正常运行;
*p=&i;//VC6.0编译报错,不能给一个*p为整形,&i为类型为整形指针,不同类型不能赋值(强制类型转换可编译通过);
p=i;//VC6.0编译报错,P为整形指针,i为整形,不同类型不能赋值(强制类型转换可编译通过);
int i=5;//定义整形变量i,赋初值为5;
*p=i;//VC6.0 让P所指向的值为i的值。编译通过,但是运行是出错;
p=&i;// 让指针P指向i的地址,此时*p的值是5,编译通过正常运行;
*p=&i;//VC6.0编译报错,不能给一个*p为整形,&i为类型为整形指针,不同类型不能赋值(强制类型转换可编译通过);
p=i;//VC6.0编译报错,P为整形指针,i为整形,不同类型不能赋值(强制类型转换可编译通过);
#15
#14楼
对了,我就想大概知道强制转换后的值,我知道有随机性,但是只要举个例子!!!
对了,我就想大概知道强制转换后的值,我知道有随机性,但是只要举个例子!!!
#16
不是学习用汇编编代码;而是学习每句C对应的汇编。这是两个不同的概念。
#17
int *p=null;//p是一指针,地址为null
int i=5;//i是一整型变量
*p=i;//给地址为“p的值”的内存位置赋整型值i,此时p的值为null,有错
p=&i;//将“p的值”赋为i的地址,此时p的值为i的地址
*p=&i;//给地址为“p的值”的内存位置赋i的地址
p=i;//将“p的值”赋为i
#1
int *p=null;
int i=5;
*p=i; //出错 还没有指向某个地址 就取值了
p=&i; //对的 最常见的用法
*p=&i; //类型不一致
p=i; //类型不一致 出错
#2
*p=i;和p=&i;一样的...
*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;
多看看指针相关的内容吧...
*p=&i;和p=i;一样的...不过p=i要类型转换下p=(int*)i;
多看看指针相关的内容吧...
#3
第一个我到某本书上看到过这个用法,第三个我看过***p=&i的用法, 就是前面有三个*;
麻烦解释下,是书上的错误吗?我打算换一本书·
#4
int *p=null;
int i=5;
*p=i;//这个是对指针P所指的内存位置赋值(要是p为野指针或指null的话会报错)
p=&i;//这个是把i的地址赋给p
*p=&i;//这个类型不匹配
p=i;//这个类型不匹配
#5
int *p=null;-----整形指针p赋值为空
int i=5;-----整形i赋值为5
*p=i;----指针p解引用用变量i赋值
p=&i;----指针p指向整形变量i的地址
*p=&i;--错误
p=i; --错误
不同类型变量不能互相赋值
int i=5;-----整形i赋值为5
*p=i;----指针p解引用用变量i赋值
p=&i;----指针p指向整形变量i的地址
*p=&i;--错误
p=i; --错误
不同类型变量不能互相赋值
#6
正解~~
#7
我也知道是一样的说法,但是,不明白其中的机制,举例说明下,各个时候 P 、I各个的值,和类型!
谢谢了~~~~~~~~~~
#8
int *p=&i 和 *p=&i
前一个的意思是不是可以大概写成这样 int *(p=&i) / 后一个就是错的了吗?如果i变量内存里面恰好也是个指针类型的就可以了如i的值为0000fff00 是吗?
#9
int *p = &i; 这叫做 定义时 赋值
展开看
int *p;
p = &i;
*p = &i;
没有这么干的
#10
额,,,刚才我说的不对...差点误人子弟- -
其实指针p存储的是内存的地址....通过*p来访问该地址存储的数据
int *p=null; //p=0;
int i=5; //变量i=5;假设i的内存地址:0x00abcedf
*p=i; //地址为0的内存区域被赋值5...这句有问题...
p=&i;//p=0x00abcedf,即i的内存地址..这句没问题...
*p=&i;//p指向的内存区域被赋值0x00abcedf也需要类型转化*p=(int)&i;
p=i; //这句需要类型转换...p=(int*)i....p=5
#11
VC调试时按Alt+8,TC或BC用TD调试,打开汇编窗口看每句C对应的汇编不就啥都明白了吗。
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
(Linux或Unix下应该也可以在用GDB调试时,看每句C对应的汇编。)
想要从本质上理解C指针,必须学习汇编以及C和汇编的对应关系。
从汇编的角度理解和学习C语言的指针,原本看似复杂的东西就会变得非常简单!
#12
现在从事.NET开发,突然觉得.net太白痴,就想学学以前读书时的C语言和数据结构。
回复11楼的兄弟,我其实以前也想从事C++或汇编的,早就认识了他的强大,但是无奈老师讲过一遍汇编,让我从清晰逐渐走向糊涂,然后走向深渊,最后放弃。。。现在汇编的书都给卖了··其余的C语言和C++还留着···哎·····
回复11楼的兄弟,我其实以前也想从事C++或汇编的,早就认识了他的强大,但是无奈老师讲过一遍汇编,让我从清晰逐渐走向糊涂,然后走向深渊,最后放弃。。。现在汇编的书都给卖了··其余的C语言和C++还留着···哎·····
#13
二楼上面说的没一句是对的。
*p =i p =&i 怎能一样呢?前者是指针p已经指向一个有效地址,然后把指向的地址赋值为与i相同的值,实际是有内存复制的过程,后者是将指针p直接指向变量i所在的内存,改变了指针的指向,并没有复制数据。
再看后面,*p =&i ,p =(int *)i
前者p仍然已指向(假设,若非就出错)一个有效地址,将这个地址里的内容赋值为i的地址,后者是改变指针p的指向为变量i的内容,这两个都意义不大,假设:变量i地址为1FFF0,其内容是整数10,那么,*p =&i 指针指向的内容变成1FFF0,p =(int *)i,指针指向转为10 这个地址,而地址10处的内容是什么就完全不知道了……二楼纯属误人子弟,像这样的事情我发现这个论坛还有不少,希望大家能多思考,把正确的东西讨论出来,不要让错误的结论流传起来。
*p =i p =&i 怎能一样呢?前者是指针p已经指向一个有效地址,然后把指向的地址赋值为与i相同的值,实际是有内存复制的过程,后者是将指针p直接指向变量i所在的内存,改变了指针的指向,并没有复制数据。
再看后面,*p =&i ,p =(int *)i
前者p仍然已指向(假设,若非就出错)一个有效地址,将这个地址里的内容赋值为i的地址,后者是改变指针p的指向为变量i的内容,这两个都意义不大,假设:变量i地址为1FFF0,其内容是整数10,那么,*p =&i 指针指向的内容变成1FFF0,p =(int *)i,指针指向转为10 这个地址,而地址10处的内容是什么就完全不知道了……二楼纯属误人子弟,像这样的事情我发现这个论坛还有不少,希望大家能多思考,把正确的东西讨论出来,不要让错误的结论流传起来。
#14
int *p=null;//定义整形指针p,给p赋初值为空;
int i=5;//定义整形变量i,赋初值为5;
*p=i;//VC6.0 让P所指向的值为i的值。编译通过,但是运行是出错;
p=&i;// 让指针P指向i的地址,此时*p的值是5,编译通过正常运行;
*p=&i;//VC6.0编译报错,不能给一个*p为整形,&i为类型为整形指针,不同类型不能赋值(强制类型转换可编译通过);
p=i;//VC6.0编译报错,P为整形指针,i为整形,不同类型不能赋值(强制类型转换可编译通过);
int i=5;//定义整形变量i,赋初值为5;
*p=i;//VC6.0 让P所指向的值为i的值。编译通过,但是运行是出错;
p=&i;// 让指针P指向i的地址,此时*p的值是5,编译通过正常运行;
*p=&i;//VC6.0编译报错,不能给一个*p为整形,&i为类型为整形指针,不同类型不能赋值(强制类型转换可编译通过);
p=i;//VC6.0编译报错,P为整形指针,i为整形,不同类型不能赋值(强制类型转换可编译通过);
#15
#14楼
对了,我就想大概知道强制转换后的值,我知道有随机性,但是只要举个例子!!!
对了,我就想大概知道强制转换后的值,我知道有随机性,但是只要举个例子!!!
#16
不是学习用汇编编代码;而是学习每句C对应的汇编。这是两个不同的概念。
#17
int *p=null;//p是一指针,地址为null
int i=5;//i是一整型变量
*p=i;//给地址为“p的值”的内存位置赋整型值i,此时p的值为null,有错
p=&i;//将“p的值”赋为i的地址,此时p的值为i的地址
*p=&i;//给地址为“p的值”的内存位置赋i的地址
p=i;//将“p的值”赋为i