昨天当我在C编码时,我的朋友问我指向一个变量是指针还是变量?我坚持了一会儿。我没有找到它,我只需要回去搜索并告诉他。但我在想是否有任何功能可以区分它们。 我们可以将变量与指针变量
区分开来int a;
sizeof(a); // gives 2 bytes
int *b;
sizeof(b); // gives 2 bytes
// if we use sizeof() we get same answer and we cant say which is pointer
// and which is a variable
有没有办法找出变量是普通变量还是指针?我的意思是,在查看您在开头声明的变量然后向下走1000行代码后,有人会说它是指针或变量吗?
评论后 我想明确地说它是一个16位系统架构。
答案 0 :(得分:8)
首先,问题“它是指针还是变量”没有多大意义。指针变量是变量,就像整数变量或数组变量一样,是变量。
所以真正的问题是某些东西是否是指针。
不,没有任何功能可以告诉你某些东西是否是指针。如果你考虑一下,用像C这样的静态类型语言就不可能。函数接受某些指定类型的参数。除非首先将类型(指针或其他方式)正确,否则不能将变量传递给函数。
答案 1 :(得分:3)
你的意思是在运行时区分它们而不看代码?不,你不能。指针是保存内存地址的变量。您无法在运行时检查它。这意味着,没有这样的函数isPointer(n)
将根据参数n
返回true / false。
答案 2 :(得分:2)
您可以从使用中推断出类型。
例如:
char* c;
...
c[0] = 'a';
*c = 'a';
索引和解除引用会让你知道它是指向某个东西的指针(或者它是一个数组,如果定义为char c [SOME_POSITIVE_NUMBER];)。 此外,像memset(c,...),memcpy(c,...)这样的东西会暗示c是一个指针(数组)。
OTOH,你通常不能用指针大部分算术,所以,如果你看到类似
的东西x = c * 2;
y = 3 / c;
z = c << 1;
w = 1 & c;
然后c不是指针(数组)。
答案 3 :(得分:1)
三件事:
答案 4 :(得分:0)
如果您希望在源代码中看到变量时能够判断变量是否为指针,但又不回头查看声明,常见的方法是在路上指出它你命名你的变量。例如,您可以在指针名称的开头加上“p”:
int *pValue; /* starts with 'p' for 'pointer' */
int iOther; /* 'i' for 'integer' */
......甚至:
int *piSomething; /* 'pi' for 'Pointer to Integer' */
当您在代码中看到变量时,可以很容易地告诉类型。有些人使用相当多的前缀,以区分各种类型。
尝试查看“匈牙利表示法”作为示例。
答案 5 :(得分:-1)