这是关于数组到指针的代码。
问题是我不理解输出。
根据我研究的内容*p
表示地址p处的值包含地址处的*(*p)
值(地址p处的值)
那么为什么输出是不同的。
代码:
---------------------------------------------------------------------------
#include<stdio.h>
void main()
{
static int a[ ] = { 0, 1, 2, 3, 4 } ;
int *p[ ] = { a, a + 1, a + 2, a + 3, a + 4 } ;
printf ( "\n%u %u %d", p, *p, * ( *p ) ) ;
}
,输出
3545106368 6293840 0
请帮我理解这个输出。保持简单易用。
答案 0 :(得分:1)
在内存中,您的数组看起来像这样:
+------+------+------+------+------+ | a[0] | a[1] | a[2] | a[3] | a[4] | +------+------+------+------+------+ ^ ^ ^ ^ ^ | | | | | +------+------+------+------+------+ | p[0] | p[1] | p[2] | p[3] | p[4] | +------+------+------+------+------+
即。 p
的每个元素都指向a
中的相应元素。
然后你必须知道,当使用数组时,它会衰减到指向其第一个元素的指针,即表达式p
与&p[0]
相同。因此,当您打印p
时,您将打印出数组p
的第一个元素的地址。
当您取消引用p
指定的指针时,您实际上正在执行*&p[0]
。运算符的取消引用和地址相互抵消,因此当您打印*p
时,您正在打印p[0]
,这是数组p
中第一个元素的值。
该元素p[0]
又是a[0]
的指针。因此,当您取消引用该指针(在**p
中,与*p[0]
相同)时,您将获得a[0]
的值。
此外,对于任何数组或指针p
和索引i
,表达式p[i]
与*(p + i)
相同。由此得出p[0]
与*(p + 0)
相同,*(p)
与*p
相同,与p
相同。
由此可以得出&p[0]
和*(p + i)
相同的逻辑。
由于commutative property的添加,真正让你感到困惑,表达式*(i + p)
与i[p]
相同,导致了特殊但有效的表达式printf
最后但并非最不重要的是,当使用"%p"
打印指针时,您应该使用void*
格式。它需要printf
作为参数,您还需要将指针强制转换为程序。因此,printf ( "%p %p %d\n", (void *) p, (void *) *p, **p ) ;
来电应该是
days = {0:'Mon', 1: 'Tues', 2:'Wed', 3:'Thurs', 4:'Fri', 5:'Sat', 6:'Sun'}
data['day_of_week'] = data['day_of_week'].apply(lambda x: days[x])
data['if_Weekday'] = np.where( (data['day_of_week'] == 'Mon') | (data['day_of_week'] == 'Tues') | (data['day_of_week'] == 'Wed') | (data['day_of_week'] == 'Thurs') | (data['day_of_week'] == 'Friday'), '1', '0')
参见例如this printf
(and family) reference了解更多信息。
答案 1 :(得分:0)
p
此处 0 1 2 3 4
| | | | |
a a+1 a+2 a+3 a+4 => p
printf ( "\n%u %u %d", p, *p, * ( *p ) ) ;
是一个包含指向整数的指针的数组。
p
p
是指向a
的第一个元素的指针,0
(指向*p
的指针)
p
是a
的值,0
是指向*(*p)
的地址。
*a
就像0
一样,提供了*p
。
地址的正确说明符是*u
而不是var path = require("path");
var Builder = require('systemjs-builder');
// optional constructor options
// sets the baseURL and loads the configuration file
var builder = new Builder('path/to/baseURL', 'path/to/system/config-file.js');
builder
.bundle('local/module.js', 'outfile.js')
.then(function() {
console.log('Build complete');
})
.catch(function(err) {
console.log('Build error');
console.log(err);
});
。