地址运算符&只能应用于内存中的对象,即变量和数组元素。他不能作用于表达式,常量和register类型的变量。
*ip++ 和 (*ip)++的区别,前者将指针ip本身指向下一个元素,而后者将ip指向的内容加1,因为一元运算符*和++,优先级相同,但是结合顺序是自右向左。
对于:int a[10]
&a 的类型为int (*)[10],是一位数组,而a的类型为int *类型。所以注意不要搞错。
int *p = a;是可以的。
int *p = &a[0];也是可以的
&a[i]和a+i的含义是相同的。
但要注意:数组名是常量,而指针是变量。可以对指针进行算数运算,但是对数组名是不可以进行算数运算的。
对指针进行算数运算的含义是:取其前后的若干个相同类型的元素。
char string[] = "hello world!"
char *string2 = "hello world!"
两者有着很大的区别,string在内存中开辟了一个数组来存放字符串,可以进行修改;而string2只是一个指针,指向了常量字符串,如果试图修改其内容,结果是没有定义的。
对于二维数组:int a[3][4]
如果想在函数中作为参数传入二维数组,则函数应该写为;
void fun(int a[3][4]);void fun(int a[][4]);或者void fun(int (*a)[4]);
命令行参数void main(int argc, char *argv[]);
argv[0][1],**argv第一个字符串的第一个字符
argv[1][1],(*argv)[1], *(*argv+1)第一个字符串的第一个字符
在后续的学习中注意弄清楚;二维数组和指针数组,及指向指针的指针之间的关系。int *p[13]和int (*p)[13]在引用和赋值时候的区别是什么?