Articles of punteros

Justificación del contenedor_de macro en linux / list.h

En la implementación de las listas del kernel de Linux en /include/linux/list.h , ¿cuál es la razón de ser de la primera línea (pegada a continuación) del container_of macro? const typeof( ((type *)0)->member ) *__mptr = (ptr); En un ejemplo de código mío, eliminé esta línea y cambié la definición a #define container_of(ptr, type, member) […]

¿Qué es un puntero de vacío y qué es un puntero nulo?

Así que estaba pasando por algunas preguntas de la entrevista y me encontré con uno sobre punteros nulos y vacíos , que dice: un puntero sin tipo de devolución se llama puntero nulo. Puede ser cualquier tipo de tipo de datos. ¡Esto me confundió completamente! Parece vacío y nulo podría usarse indistintamente según esta pregunta, […]

¿Sigue siendo un puntero con la dirección y el tipo correctos un puntero válido desde C ++ 17?

(En referencia a esta pregunta y respuesta .) Antes del estándar C ++ 17, la siguiente oración se incluyó en [basic.compound] / 3 : Si un objeto de tipo T está ubicado en una dirección A, se dice que un puntero de tipo cv T * cuyo valor es la dirección A apunta a ese […]

¿Cuál es la diferencia entre una referencia C # y un puntero?

No entiendo muy bien la diferencia entre una referencia C # y un puntero. Ambos señalan un lugar en la memoria, ¿no? La única diferencia que puedo deducir es que los punteros no son tan ingeniosos, no pueden apuntar a nada en el montón, están exentos de la recolección de basura y solo pueden hacer […]

Modificar un const int en C ++

ejecutar el siguiente código muestra que & x = ptr, entonces ¿cómo es que x y * ptr no son iguales? const int x=10; int* ptr =(int*) &x; *ptr = (*ptr)+1; cout << &x << " " << x << " " << ptr <<" " <<*ptr; //output : 0012FF60 10 0012FF60 11

Punteros en c ++ después de eliminar

Después de leer muchas publicaciones sobre esto, quiero aclarar el siguiente punto: A* a = new A(); A* b = a; delete a; A* c = a; //illegal – I know it (in c++ 11) A* d = b; //I suppose it’s legal, is it true? Entonces, la pregunta es sobre usar el valor de […]

Pasar matriz bidimensional mediante puntero

¿Cómo paso la matriz m a foo ()? si no puedo cambiar el código o el prototipo de foo ()? void foo(float **pm) { int i,j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) printf("%f\n", pm[i][j]); } int main () { float m[4][4]; int i,j; for (i […]

Pasar una matriz bidimensional a una función de parámetro constante

Aprendí de C Primer Plus que si quieres proteger una matriz para que no sea modificada accidentalmente por una función, debes agregar el modificador const antes de la statement del puntero en el encabezado de la definición de la función. Siguiendo este consejo sensato, en el siguiente ejemplo mínimo, estoy tratando de pasar una matriz […]

C ++: ¿Es seguro lanzar el puntero a int y luego volver al puntero nuevamente?

¿Es seguro lanzar el puntero a int y luego volver al puntero nuevamente? ¿Qué tal si sabemos si el puntero tiene 32 bits de longitud e int tiene 32 bits de longitud? long* juggle(long* p) { static_assert(sizeof(long*) == sizeof(int)); int v = reinterpret_cast(p); // or if sizeof(*)==8 choose long here do_some_math(v); // prevent compiler from […]

¿Es legal comparar punteros colgantes?

¿Es legal comparar punteros colgantes? int *p, *q; { int a; p = &a; } { int b; q = &b; } std::cout << (p == q) << '\n'; Observe cómo tanto p como q apuntan a objetos que ya se han desvanecido. Es esto legal?