1.取地址和取值
#include <stdio.h>
int main() {
int a = 100;
int *intP = &a;
printf("数据是:%d\n", a);
printf("地址是:%p\n", &a);
printf("数据是:%d\n", *(&a));
printf("数据是:%d\n", *intP);
printf("数据是:%d\n", *(*(&intP)));
return 0;
}
输出:
数据是:100
地址是:000000000061FE1C
数据是:100
数据是:100
数据是:100
&
为由变量中取出地址符号,*
为从地址值中取出这个地址中的数据符号。
int * intP = &a;
中 int *intP
是一个指针变量。
int *
就是int 数据类型数据的内存地址,也叫指针变量。
double *
就是double 数据类型数据的内存地址,也是一种指针变量。
同时 intP 是指针变量的变量名,这个变量也有自己的内存地址,也是使用& intP
进行获取。
例子中
printf("数据是:%d\n", *intP);
printf("数据是:%d\n", *(*(&intP)));
是一个输出结果。
需要区分一个概念
//声明一个存储 int 指针地址的变量
// 实际上 int* 是变量类型,intP 是变量 名,只是习惯上*intP 靠在一起
int *intP = &a;
//* 取出地址所在的值,并修改为200.这个样子,a 的值就变成200了
*intP=200;
如下面的例子:
#include <stdio.h>
int main() {
int a = 100;
int *intP = &a;
*intP = 200;
printf("a=%d", a);
return 0;
}
输出:
F:\dev\C\413\cmake-build-debug\413.exe
a=200
Process finished with exit code 0
C 语言的函数只能先声明在调用。 可以再调用之前声明,然后在最后的时候实现,这样也可以进行调用。 函数不允许重名。 字符串的使用:
#include <stdio.h>
int main(){
// char *a = "ddd";
// "ddd"是放在了常量区。a 作为char 指针,指向了常量区地址(搜素四驱模式)
char a[] = "ddd";
printf("内容是:%s",a);
}