This gives you a JUP:

Code:
#include <acknex.h>
#include <default.c>

ENTITY* pEmeter_first;
ENTITY* pEmeter_last;

#define ent_nextListObj skill97

//Add an object to the list
void ent_listAdd(ENTITY* p, ENTITY** first, ENTITY** last)
{
	if (*first == NULL) {
		*first = p;		
		*last = p;
		return;
	} 
	
	last.ent_nextListObj = p;
	last = p;	
}

void main() 
{
	level_load(NULL);
	
	wait(2);
	
	pEmeter_first = NULL;
	pEmeter_last = NULL;
	
	ENTITY* p = ent_create(CUBE_MDL,nullvector,NULL);	
	
	ent_listAdd(p, &pEmeter_first, &pEmeter_last);

	if (p == pEmeter_first) {
		error("JUP!");
	} else {	
		if (pEmeter_first == NULL) {
			error("URGHS!");
		} else {
			error("???");
		}
	}
}



&object returns a pointer to "object", *object returns the object "object" points to.

But are you aware that p.ent_nextListObj points to the entity itself if it's the first entity in the list?