数组变量的“值”是什么?

时间:2016-07-09 15:56:43

标签: c arrays pointer-arithmetic

我在一本书中有这个例子:

#define ALLOCSIZE 10000 /* size of available space */

static char allocbuf[ALLOCSIZE]; /* storage for alloc */
static char *allocp = allocbuf; /* next free position */

char *alloc(int n) /* return pointer to n characters */
{
    if (allocbuf + ALLOCSIZE - allocp >= n) { /* it fits */
        allocp += n;
        return allocp - n; /* old p */
    } else /* not enough room */
      return 0;
}

void afree(char *p) /* free storage pointed to by p */
{
     if (p >= allocbuf && p < allocbuf + ALLOCSIZE)
         allocp = p;
}

我需要知道allocbuf代表什么(它的值),因此它用于:

if (allocbuf + ALLOCSIZE - allocp >= n) 

2 个答案:

答案 0 :(得分:2)

引用C11,章节§6.3.2.1/ p3,(强调我的

  

除非它是sizeof运算符,_Alignof运算符或者&运算符的操作数。   一元allocbuf运算符,或者是用于初始化数组的字符串文字,一个表达式   type ''类型''的数组被转换为类型''指向类型''指针的表达式   到数组对象的初始元素并且不是左值。 [...]

因此,在用作

的代码中,if (allocbuf + ALLOCSIZE - allocp >= n) { 是一种数组类型
var mymodule = angular.module('mymodule', ['ngRoute']);
mymodule.config(function($routeProvider) {
  $routeProvider
  .when('/', {
    templateUrl : 'pages/enter.html',
    controller  : 'SharedController'
  }) 
  .when('/chat', {
    templateUrl : 'pages/chat.html',
    controller  : 'cntrlChat'
  });
});


mymodule.factory('myService', function() {
 var savedData = {}
 var set=function (data) {
   savedData = data;
 } 
 function get() {
  return savedData;
}

return {
  set: set,
  get: get
}

});

mymodule.controller('SharedController', ['$scope', 'myService','$location',
  function($scope, myService, $location){ 

    $scope.updateMsg = function (msg) {
      myService.set(msg);
      $location.path("chat");
    }

    $scope.getMsg = function () {
      $scope.message = myService.get();
    }

  }]);

mymodule.controller("cntrlChat", ['$scope', 'myService','$q','$timeout',
  function($scope, myService,$q,$timeout){ 
   var socket = io();
   $scope.messages = [];
   $scope.room= myService.get();
   socket.emit('room', $scope.room);

   $scope.submit=function(){
    socket.emit('chat_message',{ room: $scope.room, msg: $scope.room+": "+$scope.insertedText });
    $scope.insertedText='';
    return false; 
  }

  socket.on('chat_message', function(msg){
    $scope.$apply(function() {
      $scope.messages.push(msg);

    });
  });

  socket.on('info_message', function(msg){
    $scope.$apply(function() {
      $scope.info=msg;

    });
  });


  $scope.isUserTyping= function() {
   var runTwoFunctionWithSleepBetweenThem=function(foo1, foo2, time) {
    $q.when(foo1()).then(() => $timeout(foo2, time));
  }
  runTwoFunctionWithSleepBetweenThem(function (){socket.emit('info_message', { room: $scope.room, msg: 'user is typing...' })},
    function (){socket.emit('info_message', { room: $scope.room, msg: '' });},1500); 
}

}]);

会衰减到指向数组第一个元素的指针。

答案 1 :(得分:1)

在这种情况下,数组衰减到指向其存储位置的指针。换句话说:指向其第一个元素的指针。

你可以使用allocbuf(或更好的:&allocbuf[0]更好地传达&#34;指向第一个元素&#34;)的含义以获得指向第一个元素的指针,并且allocp旨在指向下一个自由元素。因此allocp - allocbuf将为您提供元素数量&#34;使用&#34;。