punteros operaciones ejemplos declaracion con cadenas arreglos aritmetica c pointers

operaciones - ¿Usando el puntero a la matriz char, se puede acceder a los valores en esa matriz?



punteros en c ejemplos (4)

La mayoría de las personas que responden ni siquiera parecen saber qué es un puntero de matriz ...

El problema es que se realizan aritmética de puntero con un puntero de matriz: ptr + 1 significará "saltar 5 bytes más adelante ya que ptr apunta a una matriz de 5 bytes".

Haz esto en su lugar:

#include <stdio.h> int main() { char (*ptr)[5]; char arr[5] = {''a'',''b'',''c'',''d'',''e''}; int i; ptr = &arr; for(i=0; i<5; i++) { printf("/nvalue: %c", (*ptr)[i]); } }

Tome el contenido de lo que señala el puntero de matriz y obtendrá una matriz. Entonces funcionan igual que cualquier puntero en C.

Creé ptr como puntero a una matriz de 5 caracteres.

char (*ptr)[5];

le asignó la dirección de una matriz de caracteres.

char arr[5] = {''a'',''b'',''c'',''d'',''e''}; ptr = &arr;

usando puntero ptr ¿puedo acceder a los valores de char en esta matriz?

printf("/nvalue:%c", *(ptr+0));

No imprime el valor.

En mi entender, ptr contendrá la dirección base de la matriz, pero en realidad apunta a la memoria requerida para la matriz completa (es decir, 5 caracteres). Por lo tanto, cuando ptr se incrementa, se mueve hacia delante por sizeof(char)*5 bytes. Entonces, ¿no es posible acceder a los valores de la matriz usando este puntero a la matriz?


Tu deberías crear ptr de la siguiente manera:

char *ptr;

Ha creado ptr como una matriz de punteros a caracteres. Lo anterior crea un único puntero a un char.

Editar: el código completo debe ser:

char *ptr; char arr[5] = {''a'',''b'',''c'',''d'',''e''}; ptr = arr; printf("/nvalue:%c", *(ptr+0));


su pregunta es, muy básica, así que trato de darla con mi proceso, ya que la matriz de puntero es muy diferente en la matriz de programación c, así que le doy el siguiente código para puntero de matriz, expresión, espero que sea útil:

#include<stdio.h> int main() { char arr[5]={''a'',''c'',''i'',''h'',''f''}; int i; char *p; p=arr; for(i=0;i<5;i++) { printf("%c/n",*(p+i)); } return 0; }

esto dará como resultado su array char;


Cuando desee acceder a un elemento, primero debe desreferenciarlo y, luego, indexar el elemento que desea (que también se desmarca). es decir, necesitas hacer:

printf("/nvalue:%c", (*ptr)[0]); , que es lo mismo que *((*ptr)+0)

Tenga en cuenta que trabajar con el puntero a las matrices no es muy común en C. en su lugar, uno solo usa un puntero al primer elemento en una matriz, y ya sea tratar la longitud como un elemento separado, o colocar un valor senitel al final de la array, para que uno pueda saber cuándo termina el conjunto, por ejemplo

char arr[5] = {''a'',''b'',''c'',''d'',''e'',0}; char *ptr = arr; //same as char *ptr = &arr[0] printf("/nvalue:%c", ptr[0]);