按我的理解记录一下
int var = 12;
int *p=NULL;
p = &var;
p为var的地址,*p为var的值
int var[3] = {1,2,3}
int *p;
p = var;
p++;
var 为数组首地址,等同于&var[0]
p为数组首地址
p++,指针向后移动一位,指向数组第二个值的地址
#include <stdio.h>
const int MAX = 3;
int main ()
{
int var[] = {10, 100, 200};
int i, *ptr[MAX];
for ( i = 0; i < MAX; i++)
{
ptr[i] = &var[i]; /* 赋值为整数的地址 */
}
for ( i = 0; i < MAX; i++)
{
printf("Value of var[%d] = %d\n", i, *ptr[i] );
}
return 0;
}
指针数组 即 保存地址的数据,同样也可以保存字符串,字符串保存在内存中的连续位置,以\0结束,所以实际上也是保存的字符串首地址
字符串赋值用”,字符赋值用’
字符串常量不可通过指针改变常量内容,可以改变指向地址
const char* p=”ASDFGH!”;
*p = “SDFFGG”; 错
p = “SDFFGG”; 对
#include <stdio.h>
void main(){
char* var = "asdfghj"; //*var是一个指针,var保存的是字符串首地址,C语言中没有string类型,而字符串实际上是以空字符结尾的数组
printf("%x\n",var);
printf("%x\n",&var[0]);
var = "sssss"; //字符串赋值,赋的是首地址
printf("%s\n", var);
}