回答
int* a
将变量a
声明为指向整数的指针。
=0
和=10
为变量赋值一些值。
请注意,a
是一个指针,它的值应该是一个地址。
地址
0
有特定的含义:它是NULL
,表示空指针。地址
10
没有意义:它是一个随机存储器地址。由于它不是NULL
,因此大多数函数都会将其视为有效地址,并对其进行解引用,因此会给应用程序带来问题(未定义的行为)。
int* a = 0;
将0赋给指针。
int* a = 10;
将10指定给指针。请注意,指针(即应包含地址的变量)不是指针!
最后一个是危险的,因为它击败NULL
指针检查。
这里我们给指针赋值,int * a = 0;意思是int a * = NULL;然而,在C++中,int * a = 10不会编译,因为“从整型到指针类型的转换需要reinterpret_cast,C型转换或函数式转换”,因为编译器认为10是整型而不是指针。
这是一个很好的答案,但OP没有提到C++。 +1,如果你拿出C++特定的术语。如果没有人试图用黑暗的一面来诱惑你,C足够让人迷惑。 :P – 2011-01-13 11:30:20
其中一个应该会触发警告。打开你的编译器警告!
int *a = 0;
这一个是好的。它将指针a
指定为int
并将其初始化为0或指针NULL
,这意味着它指向任何内容。尝试对其进行解引用会导致不好的事情,但是在取消引用前可以检查指针是否有效,所以指针实际上是好东西。
int *a = 10;
这并不好。它声明了与int
相同的指针,但将其初始化为10.首先,编译器会抱怨不能将其隐式转换为指针类型。如果你忽略这一点,指针指向的内存位置10,你有不保证是一个有效的int
或有效的任何东西,甚至属于你的过程。提取a
会很糟糕,就像提取a
的时候是NULL
,但更糟的是,我们无法检查a
的有效性,因为10可能很好或不好 - 我们无法知道,直到我们使用它,得到我们想要的/垃圾/鼻子恶魔。
首先,这些不是表达式,它们是声明。
int* a = 0;
声明一个指针到整数和具有零编译时整数常数,它被转换成一个空指针值进行初始化。换句话说,它声明了一个指向整数的空指针。
int* a = 10;
声明一个指针到整数指向任何特定编译器定义是在由整数10表示。在绝大多数情况下的地址,有什么都没有,所以你最终未定义的行为仅仅是通过声明这个指针。
- 1. Java中的int a [5],int a [],int a [] = {2,3}之间的区别
- 2. '(int)a','a as int'和C#中的Convert.ToInt32(a)之间的区别
- 3. int * a [3]和int(* a)[3]之间的区别?
- 4. extern int a之间的区别; extern int a = 42;
- 5. double a = a + int b和int a + = double b之间的区别是什么?
- 6. a // b和int(a/b)之间有什么区别?
- 7. “int * a = new int”和“int * a = new int()”有什么区别?
- 8. swap(int&a,int&b)和swap(int * a,int * b)。有什么区别?
- 9. java中a + = 10和a = a + 10之间的区别?
- 10. 正则表达式[A-Z]和[a-zA-Z]之间的区别
- 11. int * p =&a ++和int * p =&++ a
- 12. PHP中的$ a = 0和$ a ='0'之间的区别
- 13. “long int a = 2”和“int a = 2L”有什么区别?
- 14. static int a和int a有什么区别?
- 15. 局部变量auto int a和int a有什么区别?
- 16. “int N = a == b?a:a + b == 10?a + b:0;”的含义
- 17. String [] a和String之间的区别... a
- 18. int * x []和int(* x)[]之间的区别?
- 19. int a [5]和int(&a)[5]在模板参数推导中的区别
- 20. int a =(int)((0.7 + 0.1)* 10)。为什么a = 7?
- 21. 是int a [10] = {0,1,2,3,4,5,6,7,8,9};与int * a = {0,1,2,3,4,5,6,7,8,9}在C++中一样吗?
- 22. int * ptr =(int *)(&a + 1);
- 23. 正则表达式,^ [a-zA-Z] + $ vs [a-zA-Z]之间的区别*
- 24. C块变为表达式:({int a = 1; int b = 2; a + b;})等于3
- 25. 正则表达式:^和\ A之间的区别
- 26. A * pA = new A之间的区别;和A * pA = new A();
- 27. a + = b和a = + b之间的区别是什么,a ++和++ a?
- 28. 函数参数的区别在C++中为(const int&)和(int&a)
- 29. int p = *(int *)i和int p = *(int *)&i之间的区别
- 30. 如何将“int a”存储到“int a array”中并且“int a”的值为12345?
int * a和int * a都相同吗? – 2011-01-13 11:29:37
除非编译器给出该地址特殊含义(“视频内存缓冲区的地址”),否则定义`= 10`的行为是未定义的行为。你甚至不需要使用它。 – 2011-01-13 11:30:49