这可能是一个愚蠢的问题,但我对C指针的理解有点问题.在阵列方面更是如此.例如:
char ptr[100];
ptr[0]=10;
fprintf(stderr, "&ptr: %p \n ptr: %p \n*ptr: %d\n", &ptr, ptr, *ptr);
if ( &ptr == ptr ) {
fprintf(stderr, "Why?\n");
}
Run Code Online (Sandbox Code Playgroud)
这怎么可能呢?'ptr'位于adress&ptr.并且ptr的内容与&ptr相同.那为什么*ptr = 10 ???
数组的第一个元素的地址与数组本身的地址相同.
除非它是sizeof或&运算符地址的操作数,或者是用于在声明中初始化另一个数组的字符串文字,否则将隐式转换"N元素数组T"的表达式("衰减")键入"指向T的指针",该值将是数组中第一个元素的地址.
如果表达式a是"N元素数组T",那么表达式&a是"指向N元素数组T"的类型,或者T (*)[N].
鉴于声明
T a[N];
Run Code Online (Sandbox Code Playgroud)
那么以下都是真的:
Expression Type Decays to
---------- ---- ---------
a T [N] T *
&a T (*)[N] n/a
*a T n/a
表达式a和&a两者都计算相同的值(数组中第一个元素的位置),但是具有不同的类型(指向T的指针和分别指向T的数组的指针).
| 归档时间: |
|
| 查看次数: |
4843 次 |
| 最近记录: |