指向volatile char的volatile指针。附加静态关键字

时间:2016-06-30 06:27:06

标签: c pointers static volatile

我的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都做了什么?

由于

2 个答案:

答案 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是指向易失性字符的静态指针。