我的C语法有一个小问题。 我知道写作
volatile char * volatile foo;
为volatile char创建一个volatile指针变量。
在我的理解中,第一个volatile表示指针指向volatile元素,因为part" volatile char"。 第二个volatile表示指针" foo"本身很不稳定。
这个假设是否正确?
会是什么
static volatile char * volatile bar;
办?
假设上面的语句是正确的,它应该声明一个指向volatile + static char的volatile指针。我的问题是,它与指向目标变量是否为静态的指针无关。所以这可能会声明一个指向volatile char的静态+易失性指针。
但是,假设这是正确的,第一个volatile指向指针,第二个指向指向的数据。
哪个是正确的假设? 每个volatile都做了什么?
由于
答案 0 :(得分:2)
在我的理解中,第一个volatile表示指针指向volatile元素,因为part" volatile char"。第二个volatile表示指针" foo"本身很不稳定。这个假设是否正确?
是。 const
左侧的每个类型限定符(restrict
和/或*
和/或static
)指的是指向的type,而右侧的每个类型限定符都指向指针类型本身。这仅适用于类型限定符。
angular.module('MyServiceModule',[]);
angular.module('MyServiceModule').controller('MyController',MyController);
angular.module('MyServiceModule').directive('trainDirective',trainDirective);
function MyController($http)
{
console.log('MyController');
vm = this;
vm.openCreateQuoteScreen = function(trainName)
{
alert("train type"+trainName);
}
vm.trainList = [
{"trainName":"Shatabdi"},
{"trainName":"Rajdhani"}
];
}
function trainDirective()
{
return{
restrict: 'E',
template: '<div>TRAIN LIST</div>'+
'<ul data-ng-repeat="train in trains">'+
'<li>{{ train.trainName }}</li></ul>',
scope: {
trains: '=',
},
};
}
(以及extern,auto等)是存储类说明符,它们仅涉及可变持续时间和范围。它们总是引用声明的变量类型本身,在本例中是指针。为指向数据声明存储类说明符是没有意义的,因为该数据不是在此行上声明的,而是在其他行上声明。
另请注意,您始终可以声明一个指针变量,其类型限定符多于指向类型的限定符,但永远不会少于。实现 const correctness 时,这一点很重要。
答案 1 :(得分:0)
所以这可能会声明一个指向volatile char
的静态+易失性指针
当然,是的。
但是,假设这是正确的,第一个volatile指向指针,第二个指向指向的数据
不。 static
只表示bar
是静态的。它与volatile无关。因此,例如,static char * volatile bar
是易失性静态指针,而static volatile char *bar
是指向易失性字符的静态指针。