新しいCの仕様

ISO-C99がどの程度普及しているものか、私にはよくわかりませんし、ISOではC1Xを検討しているようでもありますが、それとは別に、過去との互換性を廃した新しいCも検討されているようです。

英語なので拾い読みしかしてなくて、理念とかポリシーとかはあまり把握できていませんが、従来のCで評判が悪かった宣言の構文が大幅に改定されているようです。
Cの宣言の構文は、一見すると「型 変数名;」であるように見えて、実際にはポインタや配列が混じってくると、(K&R的な書き方では)*を変数名のほうにくっつけて書いたり、配列は変数名の後ろにしか書けなかったりで、混乱の元になっています。新しいCでは、Javaのように「型 変数名;」で宣言できるようになっています。

  int* n;    /* intへのポインタ n の宣言 */
  int[10] a; /* intの配列(要素数10)の a の宣言 */

上のnの宣言で、*がintにくっつけて記述されていることに注目してください。
これはスタイルの問題ではありません。驚くべきことに、*を変数名にくっつけて記述すると、違う意味になります(スペースの位置で意味が違ってしまうなんて、と思うかもしれませんが(私も思いますが)、議事録によれば、「それを言うならRubyなんか」と言っているように見えます)。

では以下のように書くとどんな意味になるかというと、

  int *n;

「*nと書いたときにintとして参照できる変数の宣言」になります。確保されるオブジェクトのサイズは、常に宣言の左側で指定している型のサイズなので、このケースではint分の領域が確保され、*nでそれが参照できるようになるわけです。
よって、このCでは、以下のコードは合法です。

#include <stdio.h>

int main( void ) {
    int *n;

    *n = 5;
    printf( "%d\n", *n );

    return 0;
}

では*を付けずにnと書いたらどんな意味になるかといえば、*nにアドレス演算子を適用したのと同じ意味、つまり*nのアドレスを返します。というか、間接演算子*の意味は変わっていないので、nがポインタの意味になるからこそ*nでint型が参照できる、ということのようです。
nは左辺値を持たず代入はできません。「参照渡しのような処理」を実現するための機能のようです。
よって、以下のコードも合法になります。

#include <stdio.h>

int main( void ) {
    int *n;

    scanf( "%d", n );
    printf( "%d\n", *n );

    return 0;
}

また、以下のような宣言についても同様に、

  int a[10];

「a[10]と書いたときにintとして参照できる変数の宣言」になります。
この場合も、確保されるオブジェクトのサイズは宣言の左側で指定されている型のサイズなので、intの領域がひとつだけ確保され、aはそのアドレスからsizeof(int) * 10だけ減算したところを指します(aへの代入は当然不可)。a[5]とか参照した場合の動作は未定義です。

このCは、ISOの後任団体となる万国標準化機構にて策定が進められています。
規格番号の候補は800だそうで。若い番号が取れたものです。

参考ページ:
C/C++のポインタの機能--変数の場所(アドレス)」
http://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm

内容が変更されているようなので魚拓:
1ページ目
http://s03.megalodon.jp/2008-0328-1911-56/builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm

2ページ目
http://s04.megalodon.jp/2008-0328-1913-22/builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255-2,00.htm

まあ、サンプルソースだけでも直っているのなら、このタイミングでこんな記事を上げるのも嫌らしい気がしますが、すみません、ネタを思いついてしまったもので… (今日はまだ3時間近く残ってるし)