C указатели: как сказать этот код - PullRequest
0 голосов
/ 11 августа 2011

Я нашел эту страницу со следующим объяснением указателей:
http://www.woyouxian.net/c/c0501.html

int x = 1, y = 2, z[10];
int *ip;          /* ip is a pointer to int */
ip = &x;          /* ip now points to x */
y = *ip;          /* y is now 1 */
*ip = 0;          /* x is now 0 */
ip = &z[0];       /* ip now points to z[0] */

Однако строки "y теперь 1" и "x теперь 0" описывают результаты, а не код. Как можно «сказать» эти строки, чтобы описать код (как это делают другие строки)?

Другими словами, строка «y теперь 1» неявно не имеет литерала «1» в строке, поэтому описание описывает результат кода, а не сам код. Мне нужно описание самого кода.

Ответы [ 8 ]

7 голосов
/ 11 августа 2011

C не является разговорным языком, поэтому мнения здесь могут значительно отличаться.

Я бы сказал и прокомментировал это так:

int x = 1, y = 2, z[10];
int *ip;          /* declares a pointer-to-int called "ip" */
ip = &x;          /* makes "ip" point to "x" */
y = *ip;          /* sets "y" to the value of what "ip" points to, i.e. 1 */
*ip = 0;          /* sets the value of what "ip" points to to 0 */
ip = &z[0];       /* makes "ip" point to the first element in the array "z" */

Или, чтобы оставаться ближе к вашемуисходные комментарии:

int x = 1, y = 2, z[10];
int *ip;          /* ip is a pointer to int */
ip = &x;          /* ip now points to x */
y = *ip;          /* y's value is now equal to the value of the object that "ip" points to */
*ip = 0;          /* the value of the object that "ip" points is now 0 */
ip = &z[0];       /* ip now points to z[0] */

Отказ от ответственности

На самом деле я бы не стал писать подобные комментарии в коде.Комментарии к коду предназначены для объяснения обоснование ;Синтаксис кода должен быть понятен.

Я имел в виду, что я бы аннотировал код, подобный этому, если бы мне пришлось для такой цели, как ваша.

3 голосов
/ 11 августа 2011

Строка y = *ip означает «если предположить, что« ip »является указателем (то есть адресом памяти), перейти к его адресу в памяти, получить значение и сохранить его в переменной y». Поскольку в предыдущей строке для ip был задан адрес x, значение которого равно 1, значение y после выполнения этой строки также равно 1.

Строка *ip = 0 означает «перейти к адресу, хранящемуся в ip (то есть адресу значения x), и установить значение там равным 0.

2 голосов
/ 11 августа 2011
int x = 1; /* create a integer variable x and set it to 1 */
int y = 2; /* create a integer variable y and set it to 2 */
int z[10]; /* create a list z of 10 integers  */
int *ip; /* create a pointer to an intger ip */
ip = &x; /* let ip point to the variable x */
y = *ip; /* let y be the value that ip points at */
*ip = 0; /* set the value that ip points at to 0 */
ip = &z[0]; /* let ip point at the first value in the list z */
1 голос
/ 11 августа 2011

y = *ip: установить значение переменной y на то, на что ip указывает.

*ip = 0: установить значение указателя ip на 0. Поскольку ip является указателем, *ip получает доступ к тому, на что указывает ip.

Примечание (удобная терминология): В обоих вышеперечисленных случаях * используется для разыменования указателя ip.

1 голос
/ 11 августа 2011

Это то, что вы искали?

int x = 1, y = 2, z[10];
int *ip;          /* declare ip as a pointer to an int */
ip = &x;          /* assign the address of x to ip (i.e. the value of ip is now the address of x) */
y = *ip;          /* assign y to the value of the memory at which ip points */
*ip = 0;          /* assign the value of the memory at which ip points to 0 */
ip = &z[0];       /* assign ip the address of the first element of the z array */
0 голосов
/ 11 августа 2011
y = *ip;    /* y is now the value stored in location pointed by ip */
*ip = 0;    /* value stored in location pointed by ip is now 0 */
0 голосов
/ 11 августа 2011

"значение адреса, на которое указывает ip, копируется в y"

"значение 0 копируется в адрес ip указывает на"

0 голосов
/ 11 августа 2011

Я обычно произнослю «x = 1» как «x становится 1». Другие могут сказать «х равен 1» или «х равен 1».

В вашем коде я бы сказал, что "y становится значением, на которое указывает ip", а "значение, на которое указывает ip, становится 0".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...