2016-11-17 3 views
-1

Я не уверен, как назвать этот два указателя по-другому, поэтому, пожалуйста, исправьте мои условия.разница между указателем и адресом

#include <stdio.h> 

int main() 
{ 
    int arr[3]={10,20,30}; 
    int * ptr = &arr[0];// arr 

    return 0; 
} 

Есть ли разница между arr и * ptr? Оба указали на тот же адрес, но в чем разница.

+12

На этом сайте представлено 1000 вопросов. Пожалуйста, выполните поиск. – P0W

+0

мой плохой, я не знаю, как называть arr и * ptr. – kingyum

+0

Возможно, вы называете их указателями? – ckruczek

ответ

1

arr является массив и ptr является указателем типа int.

Есть различия. Позвольте мне перечислить несколько

  1. sizeof(arr) отличается от sizeof(ptr)
  2. Вы можете сделать ptr++ операцию указателя с помощью ptr тогда arr++ является недопустимой операцией.

Идя Ваш комментарий о том, что разница между указателем и массива, я ответил на ваш вопрос

int a = 10; 
int b[5] = {1,2,3,45}; 
int *p = &a; 
b = &a; /* not valid */ 

b является массив, а не указатель, поэтому он не может содержать адрес переменной.

p = b; 
p = p +1; 

printf("%d\n",*p); /* valid as p is pointing to second element in the array */ 

b = b+1; 

не действует, так как массив не может быть изменяемым именующим

+0

Почему это было опущено? Это не самый полный ответ, который можно дать, но он не дает неверной информации. Это не может быть ничего для OP, что * ptr отличается от ptr. (* ptr = arr [0] = 10, тогда как ptr = arr = & arr [0]) –

+0

* (arr + 1) работает также как * (ptr +1) – kingyum

+0

@kingyum * (arr +1) = arr [1 ]. Что вы должны отметить: * (a + i) = a [i] – Gopi

-1

«есть некоторые различия между обрами и * PTR»

Да, есть. Например, sizeof(*ptr) имеет размер int значение, то есть sizeof(int), а sizeof(arr) - это размер всего массива и равный 3*sizeof(int).

Смежные вопросы